Ниже кусок кода не работает.Я хочу разрешить зависимость, называемую зависимостью1, используя FetchContent
, которая представляет собой статическую библиотеку и ссылку на мой целевой исполняемый файл.Обратите внимание, что статическая зависимость - это проект CMake, который находится в svn.
Примечание. FetchContent успешно выполняет извлечение svn в SOURCE_DIR во время компиляции, но выдает ошибку, когда я пытаюсь связать исполняемый файл со следующей ошибкой вline target_link_libraries(App1, dependency1)
:
Cannot specify link libraries for target "App1," which is not built by this project.
Я был бы очень признателен за любую помощь в этом.
My 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)
СпасибоЦывареву вышеуказанный вопрос решен.Была дополнительная запятая, которую я неправильно использовал в 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}), но все-таки не сделалне могу решить проблему.
Я каким-то образом могу решить проблему, но не могу полностью понять, как все это работает.
Проблема будет решена, если я использую Dependency1 вместо dependency1 в target_link_libraries.
target_link_libraries(App1 dependency1) --- Does not work
target_link_libraries(App1 dependency1) --- Works
В объявлении FetchContent я передал имя как "dependency1", поскольку я помню, что "Dependency1" не работал ранее.Обратите внимание, что имя моей зависимости - Dependency1 (с большой буквы).В target_link_libraries я думал, что это должно взять имя, которое я передал объявлению FetchContent, но это очень странно.