#ifdef和Makefile的条件编译

时间:2018-05-14 11:42:04

标签: c makefile compilation

在询问之前我已经看过这个,试过但没有帮助: conditional compliation based on variable into 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。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

生成文件

运行WITH_ATS时变量make WITH_ATS=0not empty,因此makefile中的ifdef WITH_ATS计算结果为true(即,不是您期望的那样)。

您实际需要检查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也不需要#ifdef WITH_ATS #include "ats.h" #endif 。你用这种方式实现的是include guard,这不是你想要的,你真正需要的是:

ats.h

也就是说,如果WITH_ATS已定义,则包含WITH_ATS

请注意,在您的C源文件中,WITH_ATS只是一个空宏(即,它没有任何关联的值),而在您的makefile中,0是一个变量在命令行传递的值,例如make WITH_ATS=0 <?php $ourCurrentPage = get_query_var('paged'); $newposts = new WP_Query(array( 'category_name' => 'stock-market-basics', 'orderby' => 'ID', 'order' => 'ASC', 'paged' => $ourCurrentPage )); ?> <?php if ($newposts->have_posts()): while ($newposts->have_posts()): $newposts->the_post(); ?>

答案 1 :(得分:0)

使用if代替ifdef

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