aux_source_directory使用说明
aux_source_directory只能检测目录下的.cpp文件,不能检测到头文件,.h文件需要在头文件中添加。
所以需要在.cpp里面实现一些函数,.h可以实现一些类,然后在调用的时候函数声明一下,类使用::来调用。
如果真的需要在子目录中检测到.h文件,使用
FILE(GLOB_RECURSE sources CONFIGURE_DEPENDS include/*.h *.cpp)
来检测指定目录下的.h就可以了,这样就可以直接在头文件中使用了。
此处说一个大坑,后面检测所有*.cpp文件把CMakeFiles/test.dir/CMakeFiles/3.19.2/CompilerIdCXX/CMakeCXXCompilerId.cpp这个cpp文件也给
检测进去了,而且它还有main函数,所以会报错说Main函数重复定义,所以此处需要把*.cpp去掉,换成手动加cpp文件,在add_executable里面
加上就可以了,.h文件通过target_sources添加到可运行程序中,最后静态动态库通过target_link_libraries链接到可运行程序中。
完整的Cmakelists.txt
cmake_minimum_required(VERSION 3.19)
project(test)
if (CMAKE_BUILD_TYPE MATCHES "Debug")
set(CMAKE_BUILD_TYPE Release)
endif()
set(CMAKE_CXX_STANDARD 17)
set(TBB_DIR C:\\tbb-2021.5\\oneapi-tbb-2021.5.0\\lib\\cmake\\tbb)
find_package(TBB REQUIRED)
FILE(GLOB_RECURSE sources CONFIGURE_DEPENDS include/*.h)
add_executable(test main.cpp)
target_sources(test PUBLIC ${sources})
target_link_libraries(test TBB::tbb )
message(WARNING "${sources}")