【发布时间】:2016-09-11 19:25:35
【问题描述】:
这是我编写的一个 make 文件,当前目标是将目录中的所有 c++ 文件转换为目标文件。我的问题是它总是先执行 g++,然后再执行任何其他命令。
CC=g++
CPPFLAGS=`pkg-config --cflags --libs gtkmm-3.0`
SRCS=$(wildcard classes/source/*.cc)
PROGS=$(patsubst %.cc,%,$(SRCS))
CLASS_HEADERS=classes/
all: $(PROGS)
mkdir -p build/release/objs
%: %.cc
$(CC) -I$(CLASS_HEADERS) -c $< -o build/release/objs/$(@F).o $(CPPFLAGS)
结果:
g++ -Iclasses/ -c classes/source/helloworld.cc -o build/release/objs/helloworld.o `pkg-config --cflags --libs gtkmm-3.0`
mkdir -p build/release/objs
谢谢
【问题讨论】:
-
为
build/release/objs提供另一个依赖目标,并将其放在$(PROGS)之前。 -
all的规则说:确保所有$(PROGS)都是最新的;完成后,运行mkdir将完成创建all的工作。您需要更像all: objdir $(PROGS)的东西,其中objdir的规则可能是:objdir: ; mkdir -p build/release/objs(您可以使用换行符和制表符代替分号,尽管显示的符号实际上在单行上工作)。这只是@πάνταῥεῖ所说的更长的版本。 -
Jonathan Leffler 你已经解决了我的问题,并提供了一个很好的解释来帮助我更好地理解 make 是如何工作的。