下面的代码不起作用。我想使用FetchContent
来解决名为dependency1的依赖关系,它是一个静态库,并链接到我的目标可执行文件。请注意,静态依赖项是svn中的CMake项目。
注意FetchContent在编译时成功在SOURCE_DIR中执行svn检出,但是当我尝试将可执行文件链接到第target_link_libraries(App1, dependency1)
行上的以下错误时,它给出了错误:
Cannot specify link libraries for target "App1," which is not built by this project.
非常感谢您提供任何帮助。
我的 CMakeLists.txt :
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(App1)
include(FetchContent)
message("fetching dependency1")
FetchContent_Declare(
dependency1
SVN_REPOSITORY http://............/Dependency1
)
FetchContent_GetProperties(dependency1)
if(NOT dependency1_POPULATED)
FetchContent_Populate(dependency1)
add_subdirectory(${dependency1_SOURCE_DIR} ${dependency1_BINARY_DIR})
endif()
add_executable (App1 "App1.cpp" "App1.h")
link_directories(${dependency1_BINARY_DIR})
target_link_libraries(App1 dependency1)
感谢Tsyvarev,以上问题已解决。我在targer_link_libraries中误用了一个逗号。
但是现在当我尝试构建它时,找不到静态库,即“ libDependency1.a”
Scanning dependencies of target App1
[ 25%] Building CXX object App1/CMakeFiles/App1.dir/App1.cpp.o
[ 50%] Linking CXX executable App1
/usr/bin/ld: cannot find -ldependency1
collect2: ld returned 1 exit status
make[2]: *** [App1/App1] Error 1
make[1]: *** [App1/CMakeFiles/App1.dir/all] Error 2
make: *** [all] Error 2
我添加了link_directories($ {dependency1_BINARY_DIR}),但仍然无法解决问题。
我以某种方式能够解决该问题,但无法完全理解其工作原理。
如果我在target_link_libraries中使用Dependency1而不是dependency1,则此问题已解决。
target_link_libraries(App1 dependency1) --- Does not work
target_link_libraries(App1 dependency1) --- Works
在FetchContent声明中,我将名称传递为“ dependency1”,因为我记得“ Dependency1”之前没有工作。请注意,我的依存关系的名称为Dependency1(大写D)。在target_link_libraries中,我认为它应该使用传递给FetchContent声明的名称,但它非常奇怪。