我已配置cmake扫描我的include/
文件夹中的* .cpp和* .h文件。此文件夹包含实际程序所需的所有源和标头。同时cmake扫描test/
以查找名为testXX.cpp
的文件。这些文件每个都包含一个main方法和include/
中实现的测试部分。然后,CMake会自动为它找到的每个testXX.cpp
文件生成目标并将所有内容链接在一起,因此我最终得到了多个名为testXX
的可执行文件
file(GLOB_RECURSE SRC
"include/*.cpp"
#"libs/*.c"
)
file(GLOB_RECURSE HEADER
"include/*.h"
#"libs/*.h"
)
file(GLOB_RECURSE TEST
"test/*.h"
"test/*.cpp"
)
file(GLOB_RECURSE EXTRA_LIBS
"lib/*.a"
)
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -Wall -fopenmp -O3 -funroll-loops -march=native -mtune=native -ftree-vectorize" )
#message(${CMAKE_CXX_FLAGS})
foreach( testsourcefile ${TEST} )
include_directories(${Boost_INCLUDE_DIRS})
GET_FILENAME_COMPONENT(testname ${testsourcefile} NAME)
string( REPLACE ".cpp" "" testname ${testname} )
#message(${HEADER})
#message(${testname})
#message(${EXTRA_LIBS})
add_executable( ${testname} ${testsourcefile} ${HEADER} ${SRC})
target_link_libraries( ${testname} ${Boost_LIBRARIES} ${EXTRA_LIBS})
endforeach( testsourcefile ${TEST} )
到目前为止,这完全有效,但有一个小问题。每个可执行文件都会获取所有头文件和源文件 - 无论是否需要它们。因此,即使此文件不使用大多数头文件/源文件,也会为每个testXX.cpp
编译每个头文件/源文件。也许有一种方法可以动态设置${HEADER}
和${SRC}
只包含所需的标头/来源?
gcc / g ++有一个选项MMD
来查找所有引用的标题/来源 - 也许这可以在这里使用?有什么想法吗?