У меня есть проект, который использует внешнюю библиотеку. CMakeLists.txt проекта выглядит следующим образом:CMake: rebuild external project
cmake_minimum_required(VERSION 3.6.0)
project(my-project)
set(CMAKE_CXX_STANDARD 14)
include(ExternalProject)
find_package(Git REQUIRED)
ExternalProject_Add(library
PREFIX ${my-project_SOURCE_DIR}/lib/library
GIT_REPOSITORY https://github.com/vendor/library
GIT_TAG master
UPDATE_COMMAND ""
INSTALL_COMMAND ""
)
link_directories(${my-project_SOURCE_DIR}/lib/library/src/library-build/src)
add_subdirectory(src)
И ЦСИ/CMakeLists.txt так:
include_directories(../lib/library/src/library/include)
add_executable(my-project
main.cpp
)
add_dependencies(my-project library)
target_link_libraries(my-project liblibrary.a)
Он тянет библиотеку из Git и строит его в первый раз без каких-либо проблем.
Я хочу отредактировать исходный код библиотеки и автоматически перекомпилировать файл .a. Каким самым чистым способом я могу это достичь? В настоящее время он игнорирует любые обновления исходного кода, поскольку он уже имеет .a-файл библиотеки.
Когда я пытаюсь добавить
add_subdirectory(lib/library/src/library/src)
к моей главной CMakeLists.txt, я получаю следующее сообщение об ошибке:
CMake Ошибка при Библиотека/Библиотека/SRC/библиотека/SRC/CMakeLists.txt: 55 (add_library): add_library не может создать целевую «библиотеку», потому что еще одна цель с тем же именем уже существует. Существующая цель - это настраиваемая цель, созданная в исходном каталоге «/ cygdrive/c/Code/my-project». Дополнительную информацию см. В документации по политике CMP0002.
Я предполагаю, что это вызвано вызовом
add_library(gram STATIC ${SOURCE_FILES})
в библиотеке CMakeLists.txt и затем вызвать
ExternalProject_Add(library ...)
в проекте CMakeLists.txt.
Любые идеи?
Либо включить другую библиотеку (с помощью 'add_subdirectory()'), либо через 'ExternalProject_add()'. Сообщение об ошибке должно быть понятным. –
Как вы можете видеть, я уже использую 'ExternalProject_add()', и он не работает по своему желанию. 'add_subdirectory()' сам по себе не будет клонировать библиотеку из CVS. –