如何在 Makefile 中定义多个包含路径

Posted

技术标签:

【中文标题】如何在 Makefile 中定义多个包含路径【英文标题】:How to define several include path in Makefile 【发布时间】:2011-05-07 07:01:44 【问题描述】:

C++ 新手;对包含、库和编译过程的基本了解。还做了一些简单的 makefile。

我当前的项目涉及使用informix DB api,我需要在多个非标准目录中包含头文件。怎么写?在网上没有找到任何东西,可能是因为我没有使用好的搜索词

这是我尝试过的一种方法(不起作用)。只是为了显示makefile

LIB=-L/usr/informix/lib/c++
INC=-I/usr/informix/incl/c++ /opt/informix/incl/public

default:    main

main:   test.cpp
        gcc -Wall $(LIB) $(INC) -c test.cpp
        #gcc -Wall $(LIB) $(INC) -I/opt/informix/incl/public -c test.cpp

clean:
        rm -r test.o make.out

【问题讨论】:

【参考方案1】:

你必须在每个目录前面加上-I:

INC=-I/usr/informix/incl/c++ -I/opt/informix/incl/public

【讨论】:

它仍然对我不起作用,尽管手动运行 gcc 可以。 @NoBugs 我也有同样的问题。你找到解决办法了吗?【参考方案2】:

您需要对每个目录使用-I。但是,如果您使用 (GNU) make 的 foreach,您仍然可以用空格分隔目录:

INC=$(DIR1) $(DIR2) ...
INC_PARAMS=$(foreach d, $(INC), -I$d)

【讨论】:

或更短:INC_PARAMS=$(INC:%=-I%) 和 substitutions。 $(foreach,,) 更具可读性,但替换非常常用,因此最好熟悉它们的工作原理。 INC_PARAMS = $(addprefix -I,$(INC))【参考方案3】:

Make 的 substitutions 功能很好,帮助我写作

%.i: src/%.c $(INCLUDE)
        gcc -E $(CPPFLAGS) $(INCLUDE:%=-I %) $< > $@

您可能会发现这很有用,因为它也会要求 make 检查包含文件夹中的更改

【讨论】:

以上是关于如何在 Makefile 中定义多个包含路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在makefile中指定头文件目录

如何指定GCC的默认头文件路径

使用 autoconf/automake,如何指定包含文件路径?

在 Eclipse/CDT 中使用自定义 Makefile [重复]

Makefile 缺少包含路径 虽然路径存在并已定义

如何在makefile中指定头文件目录