2017-02-21 24 views
1

Wenn ich .h und .cpp Dateien im Verzeichnis src, wo die .cpp Dateien enthalten die .h Dateien, indem diese Befehle in CMake:CMake + Qt Creator: Header-Dateien hinzufügen, um Dateien zu projizieren

aux_source_directory(src SRC_LIST) 
add_executable(${PROJECT_NAME} ${SRC_LIST}) 

Und Öffnung Diese CMake-Datei in Qt Creator ruft alle Dateien (Quellen + Kopfzeilen) in der Liste der Projektdateien ab (standardmäßig die Dateistruktur auf der linken Seite).

nun auf der anderen Seite, wenn ich alle setzen .h Dateien in einem Verzeichnis include, und verwenden Sie diese:

include_directories(include) 
aux_source_directory(src SRC_LIST) 
add_executable(${PROJECT_NAME} ${SRC_LIST}) 

Die Header-Dateien aus den Projektdateien verschwinden!

Wie kann ich die Header-Dateien in diesem Verzeichnis behalten und sie trotzdem in den Projektdateien von Qt Creator aufgelistet haben?

Antwort

0

Ich füge meine Header-Dateien immer explizit hinzu, um jede Überraschung zu vermeiden. Aber auf MacOS mit QtCreator 4.2.0 und cmake 3.7.1 kann ich Ihr Problem nicht reproduzieren.

Ich empfehle jedoch, folgende Struktur zu verwenden, um zu wissen, welche Dateien innerhalb des Projekts sind und die Aktualisierung der cmake-Daten während der Aktualisierung von CMakeLists.txt auszulösen.

Im Projekt/CMakeLists.txt:

add_subdirectory(src) 
include_directory(include) 
add_executable(foo ${SRC_LIST}) 

Im Projekt/src/CMakeLists.txt:

set(SRC_LIST 
    ${SRC_LIST} 
    ${CMAKE_CURRENT_SOURCE_DIR}/a.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/b.cpp 
    PARENT_SCOPE 
) 
+1

'$ {QUELLEN}' 'vs $ {SRC_LIST}' wird nicht funktionieren. Das sind zwei verschiedene Variablen. –

+0

@ Torbjörn: Danke. Ich habe es repariert. –

2

Sie sollten aux_source_directory() nicht für Ihre Aufgabe verwenden. Dieser Befehl ist für etwas anderes. Listen Sie einfach die Quelldateien auf (oder fügen Sie sie in eine Variable ein).

Sie sollten include_directory() nicht mehr zum Definieren von Include-Verzeichnissen verwenden. Dieser Befehl füllt nur das Flag -I des Compilers. Definieren Sie eine Variable mit den Header-Dateien und fügen Sie diese der ausführbaren Datei hinzu. Wenn Sie nicht jede Datei manuell auflisten möchten, verwenden Sie file(GLOB ...). Beachten Sie jedoch die häufig im Internet erwähnten Vorbehalte, wenn Sie diesen Befehl verwenden.

Danach sagen CMake, das -I Flag nur für diese ausführbare Datei mit dem include Verzeichnis zu füllen. Auf diese Weise werden andere Ziele nicht durch Includes verschmutzt, sie sollten nicht verwendet werden.

set(SOURCES 
    src/main.cpp 
    src/whatever.cpp) 
set(HEADERS 
    include/whatever.h) 
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS}) 
target_include_directories(${PROJECT_NAME} PUBLIC include)