gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:13:15 24 4
gpt4 key购买 nike

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

我的问题是,如果要在没有任何错误的情况下继续进行,测试构建需要库已经存在。有没有办法让 CMake 了解在构建测试时该库将存在,还是我必须在单独的步骤中执行这些操作?

我的 CMakeLists.txt 文件如下:

根文件:

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

源文件:
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 )

最佳答案

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,然后进入测试目录并调用“make”或“msbuild”。

关于cmake - 链接到尚未使用 CMake 构建的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12881406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com