Ich habe ein Projekt, das eine externe Bibliothek verwendet. Die CMakeLists.txt Projekt sieht wie folgt aus:CMake: externes Projekt neu erstellen
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)
Und src/CMakeLists.txt wie folgt aus:
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)
Es zieht die Bibliothek von Git und baut es zum ersten Mal ohne Probleme.
Ich möchte Quellcode der Bibliothek bearbeiten und die Bibliothek .a-Datei automatisch neu kompiliert werden. Was ist der sauberste Weg, um das zu erreichen? Es ignoriert derzeit alle Aktualisierungen des Quellcodes, da es bereits eine .a-Datei der Bibliothek enthält.
Wenn ich versuche,
add_subdirectory(lib/library/src/library/src)
meiner Haupt CMakeLists.txt hinzuzufügen, erhalte ich folgende Fehlermeldung:
CMake Fehler bei lib/library/src/library/src/CMakeLists.txt: 55 (add_library): add_library kann kein Ziel "library" erstellen, da bereits ein anderes Ziel mit demselben Namen existiert. Das vorhandene Ziel ist ein benutzerdefiniertes Ziel, das im Quellverzeichnis "/ cygdrive/c/Code/my-project" erstellt wurde. Weitere Informationen finden Sie in der Dokumentation für die Richtlinie CMP0002.
Ich denke, es durch den Aufruf
add_library(gram STATIC ${SOURCE_FILES})
in der Bibliothek CMakeLists.txt verursacht wird und dann
ExternalProject_Add(library ...)
im Projekt CMakeLists.txt aufrufen.
Irgendwelche Ideen?
Enthalten Sie entweder die andere Bibliothek (mit 'add_subdirectory()') oder über 'ExternalProject_add()'. Die Fehlermeldung sollte klar verständlich sein. –
Wie Sie sehen können, verwende ich bereits 'ExternalProject_add()' und es funktioniert nicht wie gewünscht. 'add_subdirectory()' alleine klont die Bibliothek nicht aus CVS. –