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

gro*_*ter 86 c++ makefile include

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
Run Code Online (Sandbox Code Playgroud)

Ant*_*sse 101

您必须在每个目录前添加-I:

INC=-I/usr/informix/incl/c++ -I/opt/informix/incl/public
Run Code Online (Sandbox Code Playgroud)

  • 它仍然对我不起作用,尽管手动运行 gcc 可以做到这一点。 (2认同)
  • @NoBugs 我有同样的问题。你找到解决办法了吗? (2认同)

wil*_*ell 85

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

INC=$(DIR1) $(DIR2) ...
INC_PARAMS=$(foreach d, $(INC), -I$d)
Run Code Online (Sandbox Code Playgroud)

  • 或更短:`INC_PARAMS = $(INC:%= - I%)`与[substitutions](https://www.gnu.org/software/make/manual/html_node/Substitution-Refs.html).`$(foreach ,,)`更具可读性,但是替换是如此常用,以至于无论如何都要熟悉它们的工作方式. (15认同)
  • +这就是我来这里寻找的.`$(的foreach ,,)` (9认同)
  • 或`INC_PARAMS = $(addprefix -I,$(INC))`. (4认同)