繁体   English   中英

#ifdef 和条件编译与 Makefile

[英]#ifdef and conditional compilation with Makefile

在问之前我看到了这个,尝试但没有帮助: 基于变量的条件编译到makefile

就我而言,我的src_file.c包含:

#ifndef WITH_ATS
#define WITH_ATS
#include "ats.h"
#endif

而 Makefile 有:

ifdef WITH_ATS
INCLUDEDIR += -I../at2_build/include/
LDFLAGS += -L$(AT2) -lat2 -Wl,-rpath=$(AT2)
CFLAGS += -DWITH_ATS
endif

我正在尝试的是,如果我确实make WITH_ATS=1文件应该用编译的ats lib 编译,而如果make WITH_ATS=0编译应该没有ats lib。

任何帮助将不胜感激。

生成文件

运行make WITH_ATS=0 ,变量WITH_ATS 不为空,因此 makefile 中的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

C源文件

在您的src_file.c您既不需要#ifndef也不需要#define 您正在以这种方式实现的是include guard ,这不是您想要的,您实际需要的是:

#ifdef WITH_ATS
#include "ats.h"
#endif

也就是说,包括ats.h如果WITH_ATS定义。

请注意,在您的 C 源文件中, WITH_ATS只是一个空宏(即,它没有任何关联的值),而在您的 makefile 中, WITH_ATS是一个变量,它采用在命令行传递的值,例如0对于make WITH_ATS=0

使用if而不是ifdef

#if WITH_ATS
#include "ats.h"
#endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM