我创建了一个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 ...)
找到合适的表达方式。