我有一台正在维护的构建机器服务器,它正在使用Makefiles基础架构。
作为该基础架构的一部分,我将一些参数从构建机器传递给Makefile(例如:用户,构建服务器名称以及仅在编译特定项目时已知的各种构建变量)。 / p>
使用gcc -D指令
将其中一些变量聚合到代码中-DSOME_VAR=VAL
我现在被要求将Iar项目迁移到我的构建系统中。这本身不是问题,只有我无法找到使用iarbuild.exe命令行工具引入预处理器定义的任何方法。
我想我可以使用现有的H文件并在编译之前编辑它(例如使用sed),但这是一个丑陋的黑客,如果可以,我宁愿避免。
如何通过IAR正确实现这一目标?
答案 0 :(得分:3)
我最近使用选项#2和iarbuild.exe的-varfile argvarfile选项的组合解决了这个问题。对于我的情况,我控制cpputest的输出。我需要易于读取IDE构建的输出,但是需要用于构建服务器构建的junit格式化输出。以下是我的设置示例。
在IDE中创建一个全局变量。工具 - >配置自定义参数变量... 选择全局选项卡。创建组JUNIT。创建变量USE_JUNIT。将值设置为0.
在项目 - >选项 - > C / C ++编译器 - >预处理器部分添加
条目JUNIT_OUTPUT=$USE_JUNIT$
在代码中使用
#if JUNIT_OUTPUT == 1
#define FLAGS "-ojunit"
#else
#define FLAGS "-v"
#endif
创建一个名为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>
使用常规选项和-varfile jUnitOut.txt
一些观察
关于#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文件
2)使用&#34;定义的符号&#34;
"SOMEVAR=$_SOMEVAL_$"
第二种方法稍微优雅一点,但如果未设置环境变量,构建将失败,因此我可能会使用第一种方法。
答案 2 :(得分:1)
这可以回答你的问题:
要查看命令行参数,请启用IAR Embedded Workbench IDE选项&gt;工具&gt;选项......&gt; IDE选项&gt;消息&gt;显示构建消息&gt;选择所有&#39;。
是以下网页的一部分: http://supp.iar.com/Support/?Note=47884