我有以下用于构建我的 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.
基本上它会构建 .sav 文件,然后 spld 使用该文件来构建 .exe 文件。
我想将元数据添加到构建 .exe 中,我知道 wjen 使用 c++ 你必须添加一个资源文件,所以我尝试了这个..
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:文件无效或损坏