CMake获取所有引用的头文件

时间:2016-02-12 10:38:24

标签: c++ cmake

我已配置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来查找所有引用的标题/来源 - 也许这可以在这里使用?有什么想法吗?

0 个答案:

没有答案