En théorie, il est très facile de créer une application Win32 avec un fichier de ressources en utilisant cmake. Dans une commande add_executable
, un fichier de ressources peut être répertorié aussi facilement qu'un fichier source C ou C++. Il existe cependant un bogue connu lors de la construction à l'aide d'outils MinGW.Comment créer une application Win32 avec un fichier de ressources en utilisant cmake et MinGW?
Je trouve une solution de contournement, qui est d'inclure les éléments suivants dans CMakeFiles.txt ...
if(MINGW)
set(CMAKE_RC_COMPILER_INIT windres)
ENABLE_LANGUAGE(RC)
SET(CMAKE_RC_COMPILE_OBJECT
"<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>")
endif(MINGW)
Malheureusement, cela ne semble pas fonctionner. Ce qui semble arriver, c'est que windres
génère un fichier <whatever>.rc.res
que ld
ne comprend pas.
Dans mes recherches, j'ai développé un fort soupçon que le support Win32 est considéré comme une priorité très faible, en particulier en dehors de Visual Studio. C'est compréhensible, car Win32 n'est évidemment pas aussi important qu'autrefois. Et bien sûr, Visual Studio Express Editions sont facilement disponibles gratuitement.
Même ainsi, il serait commode pour moi si je pourrais utiliser MinGW GCC pour quelques vieilles applications Win32 que j'utilise encore. Si rien d'autre, je peux obtenir des statistiques de couverture de test GCOV.
Évidemment, si tout le reste échoue, je pourrais toujours gérer les fichiers de ressources en utilisant une commande de construction personnalisée. Un problème est que je ne suis pas familier avec windres ou ld, ou comment MinGW est destiné à gérer les fichiers de ressources Win32. Une autre est que je ne veux pas vraiment réinventer la roue si quelqu'un a déjà une roue supérieure qu'ils aimeraient partager avec moi.
Voilà donc essentiellement - comment puis-je prendre en charge la construction d'applications Win32 avec des fichiers de ressources en utilisant cmake, et en utilisant MinGW (mais pas rompre le support pour Visual Studio)?
Merci pour la réponse. Je suis occupé ATM, donc il se peut que quelques jours avant que je puisse regarder dans ceci encore.Une chose que je vais souligner - j'ai essayé de dire à cmake d'utiliser une autre extension. Il y a une variable qui spécifie quelle extension est utilisée, et j'ai essayé de la changer après le 'enable_language' ci-dessus avec le changement du compilateur-which. cmake est allé de l'avant et a utilisé '.res' de toute façon - je ne sais pas pourquoi. Quoi qu'il en soit, +1 parce que toutes les choses utiles à ce stade, mais il peut être un peu de temps avant que je l'essaie. – Steve314
J'ai eu le temps de jouer à nouveau avec ça, et il s'avère que le problème principal est que même si j'ai décrit cela comme un problème de format de fichier, je pensais avant tout à un problème d'extension de fichier. La solution consistait à revisiter le manuel de windres, et a le sens d'essayer de spécifier le format de sortie coff en utilisant '-O coff' indépendamment de l'extension du fichier travaillé. Je devrais probablement avoir compris que la variable cmake utilise pour les drapeaux RC, mais après que la variable d'extension de fichier n'a pas fonctionné, j'ai simplement inséré l'option dans la commande template. – Steve314
J'espère que cela ne vous dérange pas d'ajouter un peu à votre réponse avant d'accepter. – Steve314