Für den Bau einer Windows DLL oder EXE ist es meistens erforderlich, eine Ressourcendatei (.rc) zu integrieren. In dieser gibt man beispielsweise Versionsinformationen an oder versieht eine Anwendung mit einem Icon. Dazu übersetzt man die .rc-Datei mit dem Programm windres in eine Objektdatei und linkt diese in die ausführbare Datei.
CMake übernimmt diese Aufgabe automatisch, man muss lediglich die .rc-Datei als Quelldatei mit angeben:
add_executable(App main.c icon.rc version.rc)
So zumindest in der Theorie. So ganz automatisch ging das dann doch nicht, zumindest nicht bei mir. Zuerst musste ich CMake mitteilen, dass es die .rc-Dateien übersetzen soll:
enable_language(RC)
Damit funktioniert das ganze schon mal mit dem Microsoft-Compiler und dessen windres. Auch MinGW bringt den windres-Compiler mit, allerdings mit anderen Aufrufparametern. Daher schlug die Übersetzung der .rc-Dateien fehl. Um CMake den korrekten Aufruf mitzuteilen, war ein weiterer Befehl nötig:
if (${MINGW})
SET(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
endif()
Eigentlich sollte CMake seit Version 2.8.7 auch mit MinGW-windres zusammenarbeiten, zumindest laut dem TigerVNC-Projekt. Trotz der von mir verwendeten Version 3.12 hatte ich jedoch nur mit obigem Workaround Erfolg.