从理论上讲,使用cmake构建带有资源文件的Win32应用程序非常简单。在add_executable
命令中,资源文件可以像C或C++源文件一样轻松列出。但是,使用MinGW工具构建时存在已知的错误。如何使用cmake和MinGW使用资源文件构建Win32应用程序?
我发现了一个解决办法,这是包括在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)
不幸的是,这似乎并没有工作。似乎发生的是windres
生成<whatever>.rc.res
文件,其中ld
不明白。
在我的搜索中,我强烈怀疑Win32支持被视为非常低的优先级,尤其是在Visual Studio之外。这是可以理解的,因为Win32显然不像以前那么重要。当然,Visual Studio Express Editions可以免费获得。
即便如此,如果我仍然可以使用MinGW GCC作为我仍然使用的几个旧的Win32应用程序,那将会很方便。如果没有别的,我可以获得GCOV测试覆盖率统计信息。
显然,如果所有其他都失败了,我总是可以使用自定义构建命令处理资源文件。一个问题是我不熟悉windres或ld,或者MinGW如何处理Win32资源文件。另一个原因是,如果有人已经拥有优秀的轮子,并且他们愿意与我分享,我真的不想重新发明轮子。
所以这基本上就是它 - 我如何使用cmake支持使用资源文件构建Win32应用程序,并使用MinGW(但不打破对Visual Studio的支持)?
感谢您的回答。我忙于ATM,因此可能需要几天时间才能再次查看。我会指出的一件事 - 我试图告诉cmake使用另一个扩展。有一个变量指定使用哪个扩展,我试着在上面的'enable_language'之后改变那个以及哪个编译器改变。 cmake继续使用'.res' - 不知道为什么。无论如何,+1因为任何事情在这一点上都很有帮助,但在我尝试之前可能还有一段时间。 – Steve314 2010-08-23 11:50:57
我有时间再次玩这个,事实证明,主要问题是,虽然我将其描述为一个文件格式问题,但我首先想到它是一个文件扩展问题。解决方案是重新审视windres手册,并且有意识地尝试使用“-O coff”指定coff输出格式,而不管文件扩展名是否工作。我应该已经想出了变量cmake用于RC标志,但是在文件扩展变量不起作用之后,我只是将该选项插入到模板命令中。 – Steve314 2010-08-24 10:09:56
希望你不介意在接受之前给你的答案增加一点点。 – Steve314 2010-08-24 10:19:07