链接到尚未使用CMake构建的库

时间:2012-10-14 10:33:51

标签: cmake

我正在构建一个项目,其最终输出是静态库,我的基于CMake的构建系统包含两个子目录 - Src和Tests - 其中测试的构建生成可执行文件并链接到库这是从src。

构建的

我的问题是测试版本要求库已经存在,如果它要继续而没有任何错误。有没有办法让CMake了解库在构建测试时是否存在,或者我是否必须分别执行这些操作?

我的CMakeLists.txt文件如下:

根文件:

cmake_minimum_required( VERSION 2.8 )
project( mylib )
add_subdirectory( Src )
add_subdirectory( Tests )

Src档案:

file( GLOB MYLIB_SOURCES *.cpp )
add_library( mylib ${MYLIB_SOURCES} )

测试文件:

file( GLOB MYLIB_TESTS *.cpp )
add_executable( tests ${MYLIB_TESTS} )

find_package( GTest REQUIRED )
find_library( LIB_MYLIB NAMES mylib PATHS "${CMAKE_SOURCE_DIR}/Build/Src" )

include_directories( ../Src )
include_directories( ${GTEST_INCLUDE_DIRECTORIES} )

target_link_libraries( tests ${LIB_MYLIB} ${GTEST_LIBRARIES} pthread )

1 个答案:

答案 0 :(得分:5)

CMake应该能够自动找出Src和Tests之间的依赖关系,前提是你只在你的根CMakeLists.txt上调用CMake。你真的不需要find_library。

所以,我会保留你的Src CMakeLists.txt如下:为了增加'封装'你可以例如在那里设置'MyLib_INCLUDE_DIRS'并强制它进入缓存:

project( MyLib )
file( GLOB MYLIB_SOURCES *.cpp )
add_library( mylib ${MYLIB_SOURCES} )
# I do not know
set( mylib_INCLUDE_DIRS ${MyLib_SOURCE_DIR} CACHE STRING "Include-directories for MyLib" FORCE )

并重写您的测试CMakeLists.txt:

project( MyTests )
file( GLOB MYLIB_TESTS *.cpp )
add_executable( tests ${MYLIB_TESTS} )

find_package( GTest REQUIRED )
include_directories( ${mylib_INCLUDE_DIRS} )
include_directories( ${GTEST_INCLUDE_DIRECTORIES} )

target_link_libraries( tests mylib ${GTEST_LIBRARIES} pthread )

如果您只想构建“测试”,我建议您在根CMakeLists.txt上调用CMake,然后进入tests目录并调用'make'或'msbuild'。