有没有办法有条件地包括 一段代码取决于构建输出 带GCC的文件名(特别是mingw / codeblocks)
例如:
我有两个配置文件:
项目1编译为foo.exe 项目2编译为bar.exe
这两个项目都包含一个名为myheaders.h的文件
在myheaders.h里面,有关于的信息 该计划, #define APP_TITLE "my project"
#define APP_VERSION 0,0,0,1
#define APP_VERSION_STR "0,0,0,1"
我的问题:以下是可能的
#if __OUTPUT__ =="foo.exe"
#define APP_TITLE "my project"
#define APP_VERSION 0,0,0,1
#define APP_VERSION_STR "0,0,0,1"
#endif
#if __OUTPUT__ =="bar.exe"
#define APP_TITLE "side project"
#define APP_VERSION 0,0,2,2
#define APP_VERSION_STR "0,0,2,2"
#endif
我知道我可以使用#defines传递给编译器 命令行选项,但它似乎没有 处理资源文件
我的资源文件如下
#include "myheaders.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION APP_VERSION
PRODUCTVERSION APP_VERSION
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS VS_FF_PRERELEASE
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "000004b0"
BEGIN
VALUE "ProductName", APP_TITLE
VALUE "ProductVersion", APP_VERSION_STR
VALUE "FileDescription", APP_DESCRIPTION
VALUE "FileVersion", APP_VERSION_STR
VALUE "CompanyName", APP_AUTHOR
VALUE "LegalCopyright", APP_COPYRIGHT
VALUE "Comments", APP_COMMENTS
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x000,0x4b0
END
END
APP_TITLE在所有源文件中扩展为正确的字符串,除了 资源文件,它只会导致语法错误..
如果我在没有宏条件的情况下定义APP_TITLE,一切运行良好..
答案 0 :(得分:1)
更新:资源使用rc.exe编译,而不是使用C / C ++编译器编译。您需要使用rc.exe的/ d选项为/d MYPROJECT
指定/d SIDEPROJECT
然后在代码中:
#ifdef MYPROJECT
#define APP_TITLE "my project"
#define APP_VERSION 0,0,0,1
#define APP_VERSION_STR "0,0,0,1"
#endif
#ifdef SIDEPROJECT
#define APP_TITLE "side project"
#define APP_VERSION 0,0,2,2
#define APP_VERSION_STR "0,0,2,2"
#endif