如何为包含头文件的目标写入makefile?

问题描述 投票:2回答:2

我有两个文件“ create-exercise.cpp”和“ exercise.hpp”。我想编写一个使用gnu ++ 17和g ++编译它们的makefile。 exercise.hpp包含在create-exercise.cpp中。我只想从create-exercise.cpp中获取二进制文件。我要使用的命令是g++ -std=gnu++17 create-exercise.cpp -o create-exercise,并且效果很好。我尝试在make文件中使用以下内容。

CXXFLAGS=-Wall -std=gnu++17

create-exercise: create-exercise.cpp exercise.hpp

但是生成了以下g++ -Wall -std=gnu++17 create-exercise.cpp exercise.hpp -o create-exercise,我不希望exercise.hpp包含在编译命令中。我也尝试使用以下内容。

CXXFLAGS=-Wall -std=gnu++17

create-exercise.o: create-exercise.cpp exercise.hpp

生成了g++ -Wall -std=gnu++17 -c -o create-exercise.o create-exercise.cpp。我不需要-c标志。因为当我尝试运行create-exercise.o时会导致权限被拒绝错误。我也尝试了以下方法:

CXXFLAGS=-Wall -std=gnu++17

create-exercise.o: create-exercise.cpp exercise.hpp
    $(CXX) $(CXXFLAGS) create-exercise.cpp -o create-exercise.o

但是当我编辑exercise.hpp时,请说'create-exercise.o' is up to date.而不重新编译它。我该怎么办?

c++ c++11 makefile gnu-make
2个回答
1
投票

假设您要构建由编译create-exercise得到的可执行文件create-exercise.cpp,则可以使用以下makefile:

CXXFLAGS = -Wall -std=gnu++17

create-exercise:
create-exercise.o: create-exercise.cpp exercise.hpp
当编译器对其进行预处理时,

C0]包含在exercise.hpp中。因此,如果create-exercise.cpp更改,exercise.hpp应该会过时。


请注意,以上所有目标均没有配方,因此不会覆盖任何配方。当create-exercise.o在该makefile上运行时,第一个目标只是将create-exercise指定为default goal

最后一条规则只是将make前提条件添加到目标exercise.hpp。实际上,以下makefile的作用相同:

exercise.hpp

0
投票

我不确定,但也许尝试包括.hpp文件,而不是与其他文件一起编译。您可以通过使用g ++ *。cpp -I *。hpp -o输出

来实现。

尝试一下,让我知道它是否适合您。

© www.soinside.com 2019 - 2024. All rights reserved.