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

how a macro definition is passed from Makefile to a header file?

我正在尝试使用已定义和未定义的 MACRO 编译源代码两次。所以默认情况下,宏是未定义的,我想通过 Makefile 的参数来定义这个宏,比如

$(MAKE) -c $(present_dir)/new_dir -DONE_MACRO=1

所以我在 file.h 中使用这个 ONE_MACRO。 预处理器如何反映和了解此定义。我在这里使用 cygmake。如何使用 cygmake 工具传递 MACRO as argument to compiler

file.h:-

#if ONE_MACRO
  #define some_targets
#else
 #define other_targets
#endif

所以这个 ONE_MACRO 是如何从 make 文件中定义的,我试图将宏作为参数传递如下

生成文件:-

MY_TARGET:
    $(MAKE) -C $(present_dir)/target_dir -D ONE_MACRO=1 $(MAKECMDGOALS)

这是一个如何做我认为你想要的事情的例子:

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

每个编译器都有一个环境变量,它将参数传递给 compiler/linker。在处理除 GCC 以外的其他问题时,我们需要在使用前找到该环境变量。

在我的例子中,RVCT31_CCOPT 是在构建时将参数传递给编译器的变量。