• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[CMake] Abhängigkeiten von add_custom_command

exomo

NGBler

Registriert
1 Aug. 2015
Beiträge
129
Hallo zusammen,

ich habe ein kleines Problem mit CMake, vielleicht kann mir ja jemand weiterhelfen.

Ich habe ein kleines Testprojekt gebaut, um das Problem zu veranschaulichen:
[src=cmake]cmake_minimum_required (VERSION 2.6)
project (TestDependencies)

# Glob for input files in the source directory
file(GLOB INPUT_FILES *.inp)
message(STATUS "Input files: ${INPUT_FILES}")

# Create the directory where the temporary files are created
set(COLLECT_DIR ${CMAKE_CURRENT_BINARY_DIR}/Collect)
file(MAKE_DIRECTORY ${COLLECT_DIR})

# Create a custom command to produce a temporary output for each source file
foreach(INPUT ${INPUT_FILES})
message(WARNING "Generating command for: ${INPUT}")
get_filename_component(FILENAME ${INPUT} NAME_WE)
set(TMP ${COLLECT_DIR}/${FILENAME}.tmp)
add_custom_command(OUTPUT ${TMP}
COMMAND cmake -E copy ${INPUT} ${TMP}
DEPENDS ${INPUT}
COMMENT "Processing file ${FILENAME}")
list(APPEND TMP_FILES ${TMP})
list(APPEND TMP_FILE_NAMES ${FILENAME}.tmp)
endforeach(INPUT)

string (REGEX REPLACE "([^\\]|^);" "\\1 " TMP_FILES_SPACE "${TMP_FILE_NAMES}")

# Create a custom command to produce the final output from the temporary files
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Combined.txt
WORKING_DIRECTORY ${COLLECT_DIR}
VERBATIM
COMMAND cmd /C "type ${TMP_FILES_SPACE} > ${CMAKE_CURRENT_BINARY_DIR}/Combined.txt 2> NUL"
DEPENDS ${TMP_FILES}
COMMENT "Combining temporary files: ${TMP_FILES_SPACE}")

add_custom_target(CombineInputFiles ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Combined.txt
SOURCES ${INPUT_FILES}
COMMENT "Custom Target")

source_group("Input files" FILES ${INPUT_FILES})
[/src]
Dazu liegen im selben ordner noch mehrere Textdateien mit der Endung .inp
Die Idee ist, dass die .inp Dateien in ein bestimmtes Verzeichnis kopiert werden und von dort werden (als .tmp) und von dort werden dann alle Dateien zusammengefügt in eine Datei Combined.txt.
Was jetzt passieren soll ist folgendes: Wenn ich eine der .inp Dateien ändere und anschließend das Projekt baue, soll der geänderte Text auch in Combined.txt zu finden sein.

Ich habe das Projekt jetzt zum Test mit zwei verschiedenen Generatoren erzeugt, MinGW und VS2015. Beim ersten Mal bauen wurde in beiden Fällen wie erwartet die Combined.txt erstellt.

Wenn ich den Generator "MinGW Makefiles" verwende um das Projekt zu erstellen, dann funktioniert es auch weiter so wie ich es erwartete:
- Ich ändere ein Input Datei, B.inp
- Ich baue das Projekt mit "cmake --build ."
- Combined.txt enthält den geänderten Test
- Konsolenausgabe:
[KW][ 20%] Processing file B
[ 40%] Combining temporary files: A.tmp B.tmp C.tmp
[ 60%] Custom Target
[100%] Built target CombineInputFiles[/KW]

Wenn ich das gleiche allerdings mit dem Generator "Visual Studio 14 2015" mache, verhält sich das ganze nicht wie erwartet:
- Ich ändere ein Input Datei, B.inp
- Ich baue das Projekt mit "cmake --build ."
- Die Input Datei wird in das Collect-Verzeichnis kopiert, aber die Combined.txt wird nicht aktualisiert
- Konsolenausgabe (auszug):
[KW]CustomBuild:
Processing file B
Custom Target[/KW]
- Ich baue nochmal (ohne die Dateien erneut zu ändern)
- Combined.txt wird aktualisiert
- Konsolenausgabe:
[KW]CustomBuild:
Combining temporary files: A.tmp B.tmp C.tmp
Custom Target[/KW]

Es schein mir so, dass Visual Studio die Abhängigkeiten zwischen den einzelnen custom commands nicht richtig behandelt. Wie man sieht, wird die geänderte Input-Datei beim ersten Bauen nach der Änderung erkannt und der command ausgeführt, der die Datei kopiert. Beim nächsten Bauen wird dann die Änderung an der .tmp Datei erkannt und der "Combine" command ausgeführt.
Lange Rede kurzer Sinn: Muss ich was an meinem CMakeLists ändern, damit Visual Studio das so macht wie ich das will, wenn ja was?
Wenn nein, gibt es andere Ansätze, das Problem zu lösen? Ich habe schon einige Ideen ausprobiert, aber nur bedingt erfolgreich.
Ich bin für jeden Hinweis dankbar.
 
Oben