[英]#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
在您的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.