GCC -D等效于iarbuild.exe

时间:2014-12-23 21:42:29

标签: c c-preprocessor iar

我有一台正在维护的构建机器服务器,它正在使用Makefiles基础架构。

作为该基础架构的一部分,我将一些参数从构建机器传递给Makefile(例如:用户,构建服务器名称以及仅在编译特定项目时已知的各种构建变量)。 / p>

使用gcc -D指令

将其中一些变量聚合到代码中
-DSOME_VAR=VAL

我现在被要求将Iar项目迁移到我的构建系统中。这本身不是问题,只有我无法找到使用iarbuild.exe命令行工具引入预处理器定义的任何方法。

我想我可以使用现有的H文件并在编译之前编辑它(例如使用sed),但这是一个丑陋的黑客,如果可以,我宁愿避免。

如何通过IAR正确实现这一目标?

3 个答案:

答案 0 :(得分:3)

我最近使用选项#2和iarbuild.exe的-varfile argvarfile选项的组合解决了这个问题。对于我的情况,我控制cpputest的输出。我需要易于读取IDE构建的输出,但是需要用于构建服务器构建的junit格式化输出。以下是我的设置示例。

  1. 在IDE中创建一个全局变量。工具 - >配置自定义参数变量... 选择全局选项卡。创建组JUNIT。创建变量USE_JUNIT。将值设置为0.

  2. 在项目 - >选项 - > C / C ++编译器 - >预处理器部分添加

    条目
    JUNIT_OUTPUT=$USE_JUNIT$
    
  3. 在代码中使用

    #if JUNIT_OUTPUT == 1
        #define FLAGS "-ojunit"
    #else
        #define FLAGS "-v"
    #endif
    
  4. 创建一个名为jUnitOut.txt的文件,并将以下内容放入其中。

    <?xml version="1.0" encoding="iso-8859-1"?>
    
    <iarUserArgVars>
      <group active="true" name="JUNIT">
        <variable>
          <name>USE_JUNIT</name>
          <value>1</value>
        </variable>
      </group>
    </iarUserArgVars>
    
  5. 使用常规选项和-varfile jUnitOut.txt

  6. 调用iarbuild.exe

    一些观察

    关于#1,您实际上不需要创建全局变量,但是当您执行IAR时会创建... \ AppData \ Roaming \ IAR Embedded Workbench \ global.custom_argvars。 iarbuild.exe必须存在此文件才能使用您提供的-varfile。此外,您还可以创建工作区变量。它们存储在本地项目目录中的文件中。此文件可以添加到源代码控制中,因此可以避免全局变量。 IDE构建使用全局和工作空间变量,而iarbuild将使用-varfile

    关于#4,我没有找到任何关于如何格式化argvarfile的文档。所以,我在IDE中创建了一个工作区变量,找到了它创建的文件来存储变量,然后从该文件剪切/粘贴到我的jUnitOut.txt

答案 1 :(得分:2)

据我了解,iarbuild不支持直接传递这些参数。

IAR支持提出了两种可能性,这两种可能性对我有用(使用7.40.2):

1)使用preinclude文件

  • 转到项目 - &gt;选项 - &gt; C / C ++编译器 - &gt;预处理器
  • 添加一个preinclude文件(例如preinclude.h)
  • 现在让您的构建脚本在启动iarbuild
  • 之前生成该preinclude文件

2)使用&#34;定义的符号&#34;

  • 转到项目 - &gt;选项 - &gt; C / C ++编译器 - &gt;预处理器
  • 向&#34;定义符号添加选项&#34;并使用环境变量,例如"SOMEVAR=$_SOMEVAL_$"
  • 在cmd行上,设置环境变量,例如&#34;设置SOMEVAR = myvalue&#34;
  • 运行iarbuild

第二种方法稍微优雅一点,但如果未设置环境变量,构建将失败,因此我可能会使用第一种方法。

答案 2 :(得分:1)

这可以回答你的问题:

要查看命令行参数,请启用IAR Embedded Workbench IDE选项&gt;工具&gt;选项......&gt; IDE选项&gt;消息&gt;显示构建消息&gt;选择所有&#39;。

是以下网页的一部分: http://supp.iar.com/Support/?Note=47884