c知道程序输出文件名的宏

时间:2015-01-17 23:00:55

标签: c macros

有没有办法有条件地包括  一段代码取决于构建输出  带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,一切运行良好..

1 个答案:

答案 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