Ich versuche derzeit, mein Verständnis über CMake zu vertiefen. Ich versuche, http://libqglviewer.com/introduction.html]LibQGLViewer als eine Third-Party-Bibliothek in einem C++ - Projekt von mir zu verwenden.Cmake Problem mit dem Bau einer kleinen Bibliothek
Die CMakeLists.txt in dem zugehörigen Unterverzeichnis sieht wie folgt aus, wo der Teil, ich habe Fragen der add_libary Abschnitt ist und einige Header und Quelldateien wurden aus Gründen der Übersichtlichkeit weggelassen
cmake_minimum_required (VERSION 3.5.1 FATAL_ERROR)
set(target_name QGLViewerQt5)
project(${target_name})
message(STATUS "BUILDING QGLViewer-2.7.0 FROM SOURCE!")
set(BASE_DIR QGLViewer)
set(VRENDER_DIR VRender)
set(CMAKE_AUTOMOC ON)
set(QGLheaders
${BASE_DIR}/camera.h
${BASE_DIR}/config.h
${BASE_DIR}/${VRENDER_DIR}/AxisAlignedBox.h
${BASE_DIR}/${VRENDER_DIR}/Exporter.h
)
set(QGLsources
${BASE_DIR}/camera.cpp
${BASE_DIR}/${VRENDER_DIR}/Exporter.cpp
)
add_library(${target_name} ${QGLsources} ${QGLheaders})
target_include_directories(${target_name}
PUBLIC .
)
target_link_libraries(${target_name}
${OPENGL_LIBRARIES}
Qt5::Core
Qt5::Widgets
Qt5::Xml
Qt5::OpenGL
)
set(CMAKE_AUTOMOC OFF)
install(TARGETS ${target_name} DESTINATION lib)
Meine Anwendung läuft und alles ist fein.
Ich lese jedoch, dass man nur die Quelldateien mit add_library einschließen und dann target_include_directories verwenden sollte, um die zugehörigen Header-Dateien zu berücksichtigen. So ändere ich den obigen Teil zu
add_library(${target_name} SHARED ${QGLsources})
target_include_directories(${target_name}
PUBLIC
${PROJECT_SOURCE_DIR}/QGLViewer
${PROJECT_SOURCE_DIR}/QGLViewer/VRender
)
aber jetzt bekomme ich einen Fehler versucht, mein Projekt
fatale Fehler zu machen: QGLViewer/qglviewer.h: Keine solche Datei oder das Verzeichnis Kompilierung beendet.
können Sie mir bitte
- sagen, was genau PUBLIC tut. machen? Ich weiß, was PUBLIC tut, aber was bedeutet der Punkt?
- Warum funktioniert es nicht wie zuvor?
danken Ihnen im Voraus
PS: Die Ordnerstruktur ist als
folgt
Bleibt der Aufruf von 'target_link_libraries' im geänderten Code? – Tsyvarev
ja es tut, und es hat keinen Einfluss auf das Ergebnis –
@CarstenD Ich schlage vor, ersetzen Sie Bilder des Dateibaums mit der [folgenden Darstellung] (https://meta.stackexchange.com/questions/147467/is-there-a-good -way-zur-Darstellung-Datei-Struktur-in-Frage-Antwort) – Liastre