这是一个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)'之前。 –
“全部”的规则说:确保所有'$(PROGS)'都是最新的;当完成后,运行'mkdir'将完成创建'all'的工作。你需要更多的东西像'all:objdir $(PROGS)',其中'objdir'的规则可能是:'objdir:; mkdir -p build/release/objs'(你可以使用换行符和制表符代替分号,尽管显示的符号实际上可以在单行上起作用)。这只是@πάνταῥεῖ所说的更长版本。 –
Jonathan Leffler你已经解决了我的问题,并提供了一个很好的解释来帮助我更好地理解如何制作作品。 – Russeree