0

我创建了一个MyLib具有以下结构的 C++ 库:

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 ...)做到这一点。

4

0 回答 0