it-swarm.com.de

Wie erstelle ich Abhängigkeiten zwischen Zielen in CMake?

Ich versuche, CMake zu verwenden, um einige einfache Abhängigkeiten zwischen einem C++ - Projekt und den verwendeten Bibliotheken einzurichten.

Das Setup ist wie folgt

  • Projekt
    • Abhängigkeit

Das Projekt selbst enthält Quelldateien, die Header von Dependency enthalten. Wenn die ausführbare Datei erstellt wird, muss sie mit der statischen Bibliothek von Dependency verknüpft werden.

Bis jetzt kann ich dies zum Laufen bringen, aber ich muss die Include-Verzeichnisse von Dependency in der CMakeLists.txt-Datei für Project manuell angeben. Ich möchte, dass dies automatisch herausgezogen wird, und ich habe die Option ausprobiert, den Befehl find_package() zu verwenden, um dies mit begrenztem Erfolg zu tun und die Dinge viel komplizierter zu gestalten.

Alles, was ich tun möchte, ist Dependency vor Project und Project für die Bibliothek und die zugehörigen Include-Verzeichnisse. Gibt es einen einfachen Weg, dies zu erreichen?

Meine aktuellen CMake-Dateien:

Project, Datei CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)
project (Project)
include_directories ("${PROJECT_SOURCE_DIR}/Project")
add_subdirectory (Dependency)
add_executable (Project main.cpp)
target_link_libraries (Project Dependency)
add_dependencies(Project Dependency)

Dependency, Datei CMakeLists.txt:

project(Dependency)
add_library(Dependency SomethingToCompile.cpp)
target_link_libraries(Dependency)
30
radman

Seit CMake 2.8.11 können Sie target_include_directories verwenden. Fügen Sie einfach in Ihrem DEPENDENCY-Projekt diese Funktion hinzu und geben Sie die Include-Verzeichnisse ein, die Sie im Hauptprojekt sehen möchten. Den Rest kümmert sich CMake.

PROJECT, CMakeLists.txt:

cmake_minimum_required (VERSION 2.8.11)
project (Project)
include_directories (Project)
add_subdirectory (Dependency)
add_executable (Project main.cpp)
target_link_libraries (Project Dependency)

ABHÄNGIGKEIT, CMakeLists.txt

project (Dependency)
add_library (Dependency SomethingToCompile.cpp)
target_include_directories (Dependency PUBLIC include)
21
dipp

Es ist nicht genau klar, was Sie tun möchten und warum Projekt und Abhängigkeit separat erstellt werden müssen.

Mein erster wäre aber auf dein Beispiel

  1. In PROJECT CMakeLists.txt

    • Entfernen Sie add_dependencies (Project Dependency) Es ist nicht erforderlich, Abhängigkeiten anzugeben.
  2. In DEPENDENCY CMakeLists.txt

    • Projekt entfernen (Abhängigkeit) Es wird eine Bibliothek erstellt. Warum also ein eigenes Projekt haben?
    • Entferne target_link_libraries (Abhängigkeit) Weil es nichts tut
0