Zet*_*eta 3 c makefile compilation gnu-make
在问之前我看到了这个,尝试但没有帮助: 基于变量的条件编译到makefile
就我而言,我src_file.c包含:
#ifndef WITH_ATS
#define WITH_ATS
#include "ats.h"
#endif
Run Code Online (Sandbox Code Playgroud)
而 Makefile 有:
ifdef WITH_ATS
INCLUDEDIR += -I../at2_build/include/
LDFLAGS += -L$(AT2) -lat2 -Wl,-rpath=$(AT2)
CFLAGS += -DWITH_ATS
endif
Run Code Online (Sandbox Code Playgroud)
我正在尝试的是,如果我做make WITH_ATS=1文件应该用编译的atslib编译,而如果make WITH_ATS=0编译应该没有atslib。
任何帮助将不胜感激。
变量WITH_ATS是不是空运行的时候make WITH_ATS=0,因此ifdef WITH_ATS在生成文件的计算结果为真(即,不是你所期望的)。
你真正需要的是检查是否WITH_ATS等于1。这可以通过以下方式实现ifeq:
ifeq ($(WITH_ATS),1)
INCLUDEDIR += -I../at2_build/include/
LDFLAGS += -L$(AT2) -lat2 -Wl,-rpath=$(AT2)
CFLAGS += -DWITH_ATS
endif
Run Code Online (Sandbox Code Playgroud)
在你的src_file.c你不需要#ifndef也不需要#define。您正在以这种方式实现的是include guard,这不是您想要的,您实际需要的是:
#ifdef WITH_ATS
#include "ats.h"
#endif
Run Code Online (Sandbox Code Playgroud)
也就是说,包含ats.hifWITH_ATS已定义。
请注意,在您的 C 源文件中,WITH_ATS它只是一个空宏(即,它没有任何关联的值),而在您的 makefile 中,WITH_ATS是一个变量,它接受在命令行传递的值,例如0for make WITH_ATS=0。
| 归档时间: |
|
| 查看次数: |
12810 次 |
| 最近记录: |