Mein Projekt enthält zwei Dienstprogramm Bibliothek. Ich suche nach dem besten Weg, CMake-Konfigurationen für die Bibliotheken zu schreiben.Include-Header mit einer Bibliothek in CMake
/my_project
--> CMakeLists.txt
--> main.cpp
--> /utils
--> CMakeLists.txt
--> common.h
--> /base_c
--> CMakeLists.txt
--> base_c.c
--> base_c.h
--> /base_cpp
--> CMakeLists.txt
--> base_cpp.cpp
--> base_cpp.hpp
Meine aktuellen CMake Dateien:
/my_project/CMakeLists.txt
cmake_minimum_requared(VERSION 3.8)
project(my_project)
add_subdirectory(utils)
add_executable(main main.c)
target_link_libraries(main utils base_c base_cpp)
/my_project/utils/CMakeLists.txt
add_subdirectory(base_c)
add_subdirectory(base_cpp)
add_library(utils)
target_sources(utils PUBLIC common.h)
/my_project/utils/base_c /CmakeLists.txt
/my_project/utils/base_cpp/CMakeLists.txt
add_library(base_cpp base_cpp.cpp)
target_sources(base_cpp PUBLIC base_cpp.hpp)
find_library(BASEC base_c ../base_c)
target_link_libraries(base_cpp BASEC)
Das Problem ist, dass base_cpp
finden sich nicht von base_c
enthält. Wie sollte ich die Konfiguration reparieren?
Ich schaffte es mit target_include_directories(base_cpp PRIVATE ../base_c)
arbeiten, aber das ist hässlich und sollte nicht notwendig sein, nach INTERFACE_INCLUDE_DIRECTORIES documentation.
Wie Dokumentation für INTERFACE_INCLUDE_DIRECTORIES bedeutet, dass 'target_include_directories' benötigt wird, nicht wahr? Ich bin gespannt, wie Sie es geschafft haben, auch einzelne Bibliotheken ohne 'include_directories' oder' target_include_directories' zu kompilieren. – Tsyvarev
@Tsyvarev Ich kann damit völlig falsch liegen. Können Sie erklären, wie ich 'INTERFACE_INCLUDE_DIRECTORIES' einer Bibliothek verwenden kann? – voddan
Welches Build-System verwendest du nach CMake? Makefiles? Visual Studio-Projekte? Können Sie diese Dateien untersuchen, welche Verzeichnisse tatsächlich als include-Verzeichnisse übergeben werden? – Anedar