详细说明makefile中 ifeq的写法
时间: 2023-04-06 20:04:02 浏览: 201
ifeq是makefile中的条件语句,用于判断变量是否相等。它的基本语法如下:
ifeq (变量1, 变量2)
# 如果变量1等于变量2,则执行下面的语句
else
# 如果变量1不等于变量2,则执行下面的语句
endif
其中,变量1和变量2可以是任意的makefile变量,比如:
ifeq ($(CC), gcc)
# 如果CC变量的值是gcc,则执行下面的语句
else
# 如果CC变量的值不是gcc,则执行下面的语句
endif
在ifeq语句中,变量1和变量2之间用逗号隔开,括号中的空格可以省略。注意,ifeq语句中的变量名要用$()括起来,否则makefile会将它们解释为普通的字符串。
相关问题
makefile编译宏
在Makefile中,我们可以通过宏定义来控制源程序的编译。可以在Makefile中的CFLAGS变量中使用选项-D来指定宏定义。例如,可以使用以下语法在Makefile中添加宏定义:
CFLAGS += -D MACRO_NAME
在编译时,只需在编译命令中加上此选项即可。例如:
$(CC) $(CFLAGS) $^ -o $@
其中,$(CC)表示编译器命令,$^表示所有的依赖文件,$@表示目标文件。
另外,在Makefile中的规则中,目标(target)与依赖文件(目标文件)之间需要使用冒号(:)隔开。命令行必须以Tab键作为开头。
宏定义的优点是写法简单,即插即用。但缺点是宏定义的作用域有限,当工程较大且多个文件都需要进行条件编译时,需要逐个文件定义宏定义,效率低且容易出错。
另一种思路是在Makefile中定义宏定义,适用于中大型工程。可以按照以下步骤进行:
1. 在Makefile中定义宏定义,例如:
SAVE_EXCL_AND_VIDEO_ENABLE := 0
ifeq (1, ${SAVE_EXCL_AND_VIDEO_ENABLE})
$(info *******************-DSAVE_EXCL_AND_VIDEO*********************)
CFLAGS += -DSAVE_EXCL_AND_VIDEO
endif
VERSION_CONTROL := 1
ifeq (1, ${VERSION_CONTROL})
$(info *******************-DVERSION_1*********************)
CFLAGS += -DVERSION_1
else
$(info *******************-DVERSION_2*********************
endif
在编译时,根据宏定义的值来决定是否添加相应的选项。
这样做的好处是可以在Makefile中集中定义宏定义,适用于中大型工程。
#### 引用[.reference_title]
- *1* [Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D](https://blog.csdn.net/maopig/article/details/7230311)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [用make进行宏编译](https://blog.csdn.net/weixin_48524215/article/details/115150478)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [makefile设置宏定义进行条件编译,实现多版本代码同时维护](https://blog.csdn.net/m0_37635769/article/details/126884596)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文