-I标志在make文件中不起作用

Ren*_*ith 1 compiler-construction makefile

我刚写了简单的make文件来编译任意数量的文件.当我添加-I标志来添加include目录时,它无法正常工作.

    CC=g++
    CFLAGS=-I./inc
    DEPS = add.h mul.h
    OBJ = main.o add.o mul.o 

    %.o: %.c $(DEPS)
        $(CC) -c -o $@ $< $(CFLAGS)

    main: $(OBJ)
        $(CC) -o $@ $^ $(CFLAGS)
Run Code Online (Sandbox Code Playgroud)

以下是我执行make时的输出.你可以看到-I./inc缺失了

    ~/PGMS/testMakeFile > make
    g++    -c -o main.o main.cc
    main.cc:1:17: fatal error: add.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我已经浪费了很长时间来解决这个问题,有人可以帮我解决这个问题吗?

Chn*_*sos 5

您编写的处理.o文件的规则永远不会被调用,因为它是从%.c文件而不是%.cc文件构建的.因此,使用和C++变量调用文件make的隐式规则..cc$(CXX)$(CXXFLAGS)

更改CFLAGS=-I./incCXXFLAGS += -I./inc它应该工作.


说了这么多,该-I标志是一个预处理标志,这意味着你应该真正使用该CPPFLAGS变量,而不是(这将继续,因为双方按预期运行CXXFLAGS,并CPPFLAGS会隐式使用).

因此可以简化您的makefile:

OBJ := main.o add.o mul.o
DEP := add.h mul.h

CPPFLAGS := -Iinc

main: $(OBJ)
    $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(OBJ): $(DEP)
Run Code Online (Sandbox Code Playgroud)