我正在构建一个项目,其最终输出是一个静态库,而我的基于CMake的构建系统由两个子目录组成--Src和Tests--其中为测试构建一个可执行文件并将其链接到由src构建的库。链接到尚未用CMake构建的库
我的问题是,测试版本需要库已经存在,如果它继续没有任何错误。有没有一种方法可以让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)
为什么你需要一个明确的mylib find_library?除非你有一些额外的要求,否则它不是必需的。你可以直接指定target_link_libraries(测试mylib)。这样CMake就会知道测试依赖于mylib,并且会确保在开始构建测试之前构建mylib。 –
它能够在并行目录中找到mylib吗?我只在Src中定义它,并且测试构建文件不知道它。这会是一个问题吗? –
但是你的父CMakeLists知道两个目标(通过add_subdirectory)。当然,你应该只在你的根文件上调用cmake,而不要单独在测试上。我将创建一个答案来反映我的意见。 –