CMake:如何区分库的库文件和单元测试?

时间:2013-07-14 14:24:16

标签: c++ unit-testing cmake static-libraries

我创建了一个C ++库MyLib,其结构如下:

MyLib/
  |-- Module1/
       |-- SubModule1/
             |-- Tests/
                  |-- .cpp files (unit tests)
             |-- .cpp files (library sources)
       |-- Tests/
             |-- .cpp files (unit tests)
       |-- .cpp files (library sources)
  |-- Module2/
       |-- Tests/
             |-- .cpp files (unit tests)
       |-- .cpp files (library sources)
  |-- ...
  |-- CMakeLists.txt

简而言之,库的源文件分布在许多目录和子目录中。每个目录可能包含一个目录Tests,其中包含父目录中模块的单元测试。

我正在使用CMake v2.8构建库(MyLib.a)和此库的单元测试(名为MyLibTests的可执行文件)。这些是我用来实现这一目标的相关规则:

# Build MyLib.
file(GLOB_RECURSE MyLib_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
# Filter out source files of unit tests.
foreach(ITEM ${MyLib_SOURCES})
    if(${ITEM} MATCHES Tests/*)
        list(REMOVE_ITEM MyLib_SOURCES ${ITEM})
    endif()
endforeach()
add_library(MyLib STATIC ${MyLib_SOURCES})

# Build MyLibTests.
file(GLOB_RECURSE MyLib_TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
# Filter out non-unit-tests source files.
foreach(ITEM ${MyLib_TESTS_SOURCES})
    if(NOT ${ITEM} MATCHES Tests/*)
        list(REMOVE_ITEM MyLib_TESTS_SOURCES ${ITEM})
    endif()
endforeach()
add_executable(MyLibTests ${MyLib_TESTS_SOURCES})
target_link_libraries(MyLibTests MyLib ${UNIT_TESTS_FRAMEWORK_LIBS})

是否有更好的方法可以找到哪些.cpp文件构成库,哪些.cpp文件是该库的单元测试?我无法为file(GLOB_RECURSE ...)找到合适的表达方式。

0 个答案:

没有答案