簡體   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