理论上,使用CMake很容易构建一个带资源文件的Win32应用程序。在add_executable
命令中,可以像列出C或C++源文件一样轻松地列出资源文件。然而,当使用MinGW工具进行构建时,存在已知的错误。
我发现了一个解决方法,将以下内容包含在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 版本很容易获得。
即使如此,如果我能够使用 MinGW GCC 来运行一些我仍在使用的旧 Win32 应用程序,那将非常方便。如果没有其他办法,我至少可以获取 GCOV 测试覆盖率统计数据。
显然,如果所有其他方法都失败了,我总可以使用自定义构建命令来处理资源文件。问题之一是我不熟悉 windres 或 ld,也不知道 MinGW 如何处理 Win32 资源文件。另一个问题是,如果有人已经拥有一个更好的轮子,并愿意与我共享,我真的不想重新发明轮子。
所以基本上就是这样了 - 我如何支持使用 cmake 构建 Win32 应用程序并使用 MinGW(但不破坏对 Visual Studio 的支持)?