2012-06-10 17 views
6

Ich habe ein Problem mit CMake, in dem ich meine Dateien nicht zu Ordnern/Filtern innerhalb von Visual Studio hinzugefügt werden kann.Hinzufügen von Dateien zu source_group in CMake

# Add folders to filters 
file(GLOB_RECURSE DATABASE_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/database *.cpp *.h) 
file(GLOB_RECURSE LOG_SRCS   RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/log *.cpp *.h) 
file(GLOB_RECURSE NETWORK_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/network *.cpp *.h) 
file(GLOB_RECURSE THREADING_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/threading *.cpp *.h) 
file(GLOB_RECURSE UTILS_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/utils *.cpp *.h) 

source_group(database FILES ${DATABASE_SRCS}) 
source_group(log  FILES ${LOG_SRCS}) 
source_group(network FILES ${NETWORK_SRCS}) 
source_group(threading FILES ${THREADING_SRCS}) 
source_group(utils  FILES ${UTILS_SRCS}) 

Ein Problem, das dieses Problem verursacht, ist sein könnte, dass die GLOB_RECURSE ‚s die Dateien zurück, die in ${CMAKE_CURRENT_SOURCE_DIR} ist aber in Bezug auf das /database (oder was auch immer anderes Verzeichnis).

Zum Beispiel gibt es eine Datei in database/ namens dbcore.cpp. Diese Datei wird zu DATABASE_SRCS als dbcore.cpp hinzugefügt, aber Dateien im Hauptverzeichnis (d. H. ${CMAKE_CURRENT_SOURCE_DIR}) werden ebenfalls hinzugefügt, haben aber einen Pfad relativ zu database/, wie ../common.h.

Ein anderes Problem kann sein, dass innerhalb des Visual Studio-Projekts die Standard-Filter "Header Files" und "Source Files" bereits vorhanden sind.

Ich verwende CMake 2.8.6 und Visual Studio 11/2012.

Antwort

8

Um die file(GLOB_RECURSE... Anrufe Rückkehr alle Dateien jedes Mal, verwenden Sie so etwas wie zu vermeiden:

file(GLOB_RECURSE DATABASE_SRCS 
     RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 
     ${CMAKE_CURRENT_SOURCE_DIR}/database/*.cpp 
     ${CMAKE_CURRENT_SOURCE_DIR}/database/*.h) 

Dies wird den Wert von DATABASE_SRCS-database/dbcore.cpp;database/dbcore.h;... einstellen, welche Ihre source_group Anrufe funktionieren richtig machen sollte.

jedoch aus der Dokumentation für file(GLOB:

Wir empfehlen nicht GLOB eine Liste der Quelldateien von Quellbaum zu sammeln verwenden. Wenn sich keine CMakeLists.txt-Datei ändert, wenn eine Quelle hinzugefügt oder entfernt wird, kann das generierte Build-System nicht wissen, wann zu CMake aufgefordert wird, zu regenerieren.

Der vollständige Wortlaut zu sehen,

cmake --help-command file 

Die häufig empfohlene Methode Projektdateien laufen zur Liste ist sie auf die CMakeLists.txt von Hand zu haben.

Um Ihr endgültiges Problem zu beantworten, wenn die standardmäßigen "Header Files" und "Source Files" von Visual Studio leer sind (d. H. Alle Dateien in anderen Ordnern angezeigt werden), werden sie nicht angezeigt. Das Vorhandensein dieser Standardwerte wirkt sich nicht auf Ordner aus, die mit source_group erstellt wurden.

Verwandte Themen