如何将宏定义从Makefile传递到头文件?

时间:2017-08-07 14:24:59

标签: makefile cygwin

我正在尝试使用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)

2 个答案:

答案 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