我有以下批处理程序用于构建我的Prolog程序。
set /p VERSION="Enter Version:"
call "c:\Program Files (x86)\SICStus Prolog VC12 4.3.2\bin\sicstus.exe" -l build_program.pl -a %VERSION%
call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
call "C:\Program Files (x86)\SICStus Prolog VC12 4.3.2\bin\spld.exe" --output="fox_optimizer.exe" --static "fox_optimizer.sav"
output="my_program.exe" --static "my_program.sav" --resources=VERSIONINFO.rc
从用户读取VERSION变量并将其作为标志发送到build_program.pl执行此操作:
:-
nl,nl,nl,
prolog_flag(argv, Arguments),
Arguments = [VersionNumber|_],
atom_concat('fox_optimizer_',VersionNumber,FinalFileToCompile),
nl,
write('Trying to complile: '),
write(FinalFileToCompile),
nl,nl,nl,
compile(FinalFileToCompile),
save_program('my_program.sav'),
halt.
besically它构建.sav文件,然后由spld用于构建.exe文件。
我想在构建.exe中添加元数据,我知道使用c ++ wjen你必须添加一个资源文件,所以我尝试了这个..
output="my_program.exe" --static "my_program.sav" --resources=VERSIONINFO.rc
其中VERSIONINFO.rc是:
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "000904b0"
BEGIN
VALUE "CompanyName", "Britannica Knowledge Systems"
VALUE "FileDescription", "Fox Optimizer"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "fox_optimizer.exe"
VALUE "LegalCopyright", "Copyright (C) 2016"
VALUE "OriginalFilename", "fox_optimizer.exe"
VALUE "ProductName", "Fox Optimizer"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x9, 1200
END
END
但是在运行spld时我收到以下错误
cl:命令行警告D9024:无法识别的源文件类型 'VERSIONINFO.rc',对象文件假定为VERSIONINFO.rc:致命错误 LNK1136:文件无效或损坏
答案 0 :(得分:1)
spld
选项--resources
与Windows资源无关。您想要的是将.rc
文件编译为.res
文件(使用rc
工具)并将该.res
文件传递给C编译器(通过{{1} })与其他目标文件一起。如下所示:
spld
这会将Windows资源文件嵌入call "rc VERSIONINFO.rc"
call "C:\Program Files (x86)\SICStus Prolog VC12 4.3.1\bin\spld.exe" -v --output="my_program.exe" --static "my_program.sav" VERSIONINFO.res
创建的可执行文件中。
我添加了spld
标志,以便从-v
打开一些详细的调试信息。这在排除故障时很有用。