【发布时间】:2018-01-14 21:37:48
【问题描述】:
我正在尝试使用已定义和未定义的 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)
【问题讨论】:
-
您的问题不清楚。 This 展示了如何在
file.h中使用#ifdef。这能回答你的问题吗? -
不清楚你在问什么。编译器将
-D MACRO_DEFINE=1参数(通常写入选项字母D和值MACRO_DEFINE=1之间没有空格)视为有一行代码读取#define MACRO_DEFINE 1。这是在处理任何实际代码之前设置的。这是直截了当的,所以它可能不是你要问的——但不清楚你要问的是什么。 -
我想将一个宏作为参数从 Makefile 传递给编译器,这个宏在
file.h.so 中使用,所以在编译时我将编译file.h两次基于定义和未定义的宏。我想现在很清楚了。