链接到尚未通过CMake还建有图书馆(Linking to a library that hasn&

2019-08-01 11:20发布

我建立一个项目,其最终的输出是一个静态库,和我的CMake基础,构建系统由两个子目录 - src和测试 - 那里,并为测试产生的可执行文件和链接到这是建库从SRC。

我的问题是,测试版本需要的库已经存在,如果它是没有任何错误进行。 有没有办法让CMake的理解,当涉及到建立测试库将不存在,或者我要在单独的步骤做这些?

我的CMakeLists.txt文件,如下:

Root文件:

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 )

Answer 1:

CMake的应该能够找出你打电话CMake的Src和自动测试之间的依赖关系,当然仅仅设置你的根的CMakeLists.txt。 你并不真的需要一个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的,然后步入测试目录,并呼吁“让”或“的MSBuild”。



文章来源: Linking to a library that hasn't been built yet with CMake
标签: cmake