我有两个版本的代码,我需要切换它们,因为工作需要编译每个代码,同时在IAR项目上保留两个版本。我找到类似“编译开关”的东西,但我不知道它是怎么做的。是否有人告诉我可以搜索的关键字或建议?
您可以使用C预处理器#define功能在代码版本之间切换,并使用IAR EWARM项目的定义符号功能在特定头文件(例如:definitions.h)中启用#defines列表,该列表将包含在所有C文件中。
defines.h
#if defined(PROD_VERSION)
#define SOFTWARE_VERSION_PRODUCT ("1.0-release")
//...whetever specific #defines meant for the release version, for example...
//#define ENABLE_RF_STUB
#define USE_SERIAL_CTS_RTS
#elif defined(TEST_VERSION)
#define SOFTWARE_VERSION_PRODUCT ("1.0-test")
//...whetever specific #defines meant for the test version, for example...
#define ENABLE_RF_STUB
#define USE_SERIAL_CTS_RTS
#elif defined(DEBUG_VERSION)
#define SOFTWARE_VERSION_PRODUCT ("1.0-debug")
//...whetever specific #defines meant for the debug version, for example...
#define ENABLE_RF_STUB
//#define USE_SERIAL_CTS_RTS
#endif
在rf.c
#include "defines.h"
void rfInit(void)
{
#ifndef ENABLE_RF_STUB
//init RF here
#endif
}
在serial.c中
#include "defines.h"
CPU_BOOLEAN isCtsRts()
{
#ifdef USE_SERIAL_CTS_RTS
return HAL_SERIAL.isCtsRts();
#else
return DEF_TRUE; //bypass CtsRts check
#endif
}
在项目选项> C / C ++编译器>预处理器>定义的符号中:如果需要发行版本,请添加PROD_VERSION;如果需要测试版本,请添加TEST_VERSION;如果需要调试版本,请添加DEBUG_VERSION。
您只能选择上述三种配置中的一种,因为IAR只能通过项目编译编译一个版本。除非您可以创建批处理构建脚本以允许在使用三个不同项目设置创建的不同输出文件下构建所有三个版本。
IAR在工具栏中有一个配置Project> Edit_Configuration它可以通过设置这些工具来设置版本“开关”,并且可以为每个设置设置预处理器命令。