我一直在关注forgers win32教程,特别是this部分,并且想知道如何在编译win32程序时链接.rc(资源)文件? (我正在通过命令行编译)。
我正在阅读this文章,其中说你可以做这样的事情windres chocolate-doom-res.rc chocolate-doom-res.o
并以这种方式编译gcc other.o files.o etc.o chocolate-doom-res.o -o chocolate-doom.exe
但是当我尝试windres res.rc res.o
(res.rc是我的资源文件)时,它给了我windres: res.rc:3: syntax error
res.rc
#include "resource.h"
IDR_MYMENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "E&xit", ID_FILE_EXIT
END
POPUP "&Stuff"
BEGIN
MENUITEM "&Go", ID_STUFF_GO
MENUITEM "G&o somewhere else",0,GRAYED
END
END
IDI_MYICON ICON "menu_one.ico"
任何想法?。
答案 0 :(得分:8)
您错过了MENU资源类型。你应该写:
#include "resource.h"
IDR_MYMENU MENU
BEGIN
.
.
.
END
答案 1 :(得分:1)
FFWD至2020年第四季。在VS Code
时代,许多人试图在不使用Visual Studio的情况下编译WIN32 GUI“ Hello World”时都在“超越基础”的范围内苦苦挣扎。是的,资源文件可能是主要的绊脚石。这是一个更广泛的主题。
由于问题仅在于如何“编译” rc文件,所以我只回答一下。
不知何故,您也同时拥有my_app.rc
和resource.h
。
#include <windows.h>
文件的顶部放置rc
rc
。如果cl.exe
在路径上,则rc.exe
也在路径上。rc
从res
文件制作二进制rc
文件。rc my_app.rc
将产生my_app.res
rc
找不到windows.h
,则可以像这样添加路径
rc /i"C:\Windows Kits\10\Include\10.0.18362.0\um" my_app.rc
res
,在cl
命令行上,您需要将res
文件传递给链接器,就像这个虚构的示例cl编译命令行上一样cl /Zi /EHsc /Fe:my_app.exe my_app.cpp /link my_app.res
确保/link
是cl
命令行的最后一个参数。
编辑
假设您的项目文件夹包含:
my_app.cpp
resource.h
my_app.rc
首先,您将需要如上所述生成my_app.res
。
其次,在VS代码.vscode/tasks.json
中,您将拥有:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: cl.exe build active file",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/Fe:",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"${file}",
"/link /SUBSYSTEM:WINDOWS ${fileDirname}\\${fileBasenameNoExtension}.res",
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$msCompile"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: cl.exe"
}
]
}
请注意,您需要向/link
生成的标准任务文件中添加VS Code
参数。打开my_app.cpp
并执行CTRL+SHIFT+B
。这将编译活动文件并将其链接到您的WIN32 App中,其中包括您的资源。