我创建了一个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 ...)
做到这一点。