【发布时间】:2019-02-01 11:14:22
【问题描述】:
我有一个小的git project 用于基本算法和数据结构,特别是我打算用模板更改this bit,目前一切都是整数。 CMakeList.txt 是这样的:
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(ElementaryDataStructures)
set( CMAKE_CXX_STANDARD 11 )
include_directories(./)
set( HEADER_FILES list.h bstree.h rbtree.h)
set( SRC_FILES list.cpp bstree.cpp rbtree.cpp)
if(WIN32)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS YES CACHE BOOL "Export all symbols")
endif()
add_library(elementary-data-structures SHARED ${SRC_FILES} ${HEADER_FILES})
set_target_properties(elementary-data-structures PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
#set_target_properties(elemetary-data-structures PROPERTIES LINKER_LANGUAGE CXX)
虽然主要的 CMakeLists.txt 是
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(CPP_Algorithms_and_Data_Structures)
set( CMAKE_CXX_STANDARD 11 )
add_subdirectory(./ElementaryAlgorithms)
add_subdirectory(./ElementaryDataStructures)
add_subdirectory(./AdvancedDataStructures)
add_subdirectory(./GraphAlgorithms)
set(INCLUDE_FOLDERS
./ElementaryAlgorithms
./ElementaryDataStructures
./AdvancedDataStructures
./GraphAlgorithms)
include_directories(${INCLUDE_FOLDERS})
set(SRC_FILES main.cpp)
add_executable(alg-and-ds ${SRC_FILES})
target_link_libraries(alg-and-ds
elementary-algorithms
elementary-data-structures
advanced-data-structures)
所以基本上我想用模板类替换list.h 中的List 的定义,而不是list.cpp,我想用list.tpp 来实现。应该如何更改我的 CMakeLists.txts 以支持模板?
是否只包括文件夹?还是我应该记住一些微妙的事情?
更新
我确实更改了我的CMakeLists.txt 之一,如下所示:
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(ElementaryDataStructures)
set( CMAKE_CXX_STANDARD 11 )
if(WIN32)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS YES CACHE BOOL "Export all symbols")
endif()
add_library(elementary-data-structures SHARED "")
target_include_directories(elementary-data-structures PUBLIC ./)
target_sources(elementary-data-structures PUBLIC
"${CMAKE_CURRENT_LIST_DIR}/list.h"
"${CMAKE_CURRENT_LIST_DIR}/list.tcc")
set_target_properties(elementary-data-structures PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
我收到了这个错误:
-- Selecting Windows SDK version 10.0.16299.0 to target Windows 10.0.17134.
-- Configuring done
CMake Error: CMake can not determine linker language for target: elementary-data -structures
-- Generating done
-- Build files have been written to: C:/Users/Lukkio/Project/CPP-AlgAndDS/build
我做错了什么?
【问题讨论】:
-
请考虑使用
target_include_directories而不是全局include_directories。