我正在尝试使用MACRO定义的两次编译源代码。未定义。因此,默认情况下,宏未定义&我想通过Makefile中的参数定义这个宏,比如
$(MAKE) -c $(present_dir)/new_dir -DONE_MACRO=1
所以我在ONE_MACRO
中使用此file.h
。
如何反映此定义并了解预处理器。我在这里使用cygmake
。如何使用 cygmake 工具传递MACRO as argument to compiler
。
file.h: -
#if ONE_MACRO
#define some_targets
#else
#define other_targets
#endif
那么如何从make文件定义 ONE_MACRO ,我试图将宏作为参数传递如下
生成文件: -
MY_TARGET:
$(MAKE) -C $(present_dir)/target_dir -D ONE_MACRO=1 $(MAKECMDGOALS)
答案 0 :(得分:1)
对于每个编译器,都有一个环境变量,它将参数传递给编译器/链接器。在处理GCC以外的其他问题时,我们需要在使用前找到环境变量。
就像我的情况一样明智 RVCT31_CCOPT 是在构建时将参数传递给编译器的变量。
答案 1 :(得分:0)
这是一个如何做我认为你想要的事情的例子:
define_test.c:
#include <stdio.h>
#ifndef X
#define X 1
#endif
int
main()
{
printf("X = %d\n", X);
}
生成文件:
X = 1
CPPFLAGS += -DX=$(X)
define_test: FORCE
$(CC) $(CPPFLAGS) define_test.c -o $@
FORCE:
然后为宏X传递一个不同的值:
make X=2
(这假设您希望宏的值为整数;如果您希望该值为字符串,则必须通过正确引用使其更加棘手。)
您也可以直接将定义添加到CPPFLAGS,例如:
make CPPFLAGS+=-DX=2