使用CMake FetchContent模块解决静态依赖项/库后,无法链接它

时间:2019-09-22 21:15:29

标签: cmake

下面的代码不起作用。我想使用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声明的名称,但它非常奇怪。

0 个答案:

没有答案