gpt4 book ai didi

c++ - make 执行顺序的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:16 29 4
gpt4 key购买 nike

这是我编写的一个 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

谢谢

最佳答案

最简单的修复方法是在使用目标目录之前始终发出 mkdir。如果使用 -p 选项,冗余地执行此命令确实没有坏处。

%: %.cc
mkdir -p build/release/objs
$(CC) -I$(CLASS_HEADERS) -c $< -o build/release/objs/$(@F).o $(CPPFLAGS)

如我对 GNU make's -j option 的回答所述: 虽然它有时可能会起作用,但在现有的 all 依赖列表中简单地添加一个 mkdir 目标作为初始依赖是不正确的。原则上,这些可以按任何顺序执行(因此 mkdir 不一定是第一个)。如果你想采用基于依赖的方法,你必须开始做更复杂的事情。例如递归地使用 make:

all: do_mkdir
$(MAKE) $(progs)

do_mkdir:
mkdir -p build/release/objs

关于c++ - make 执行顺序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37246574/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com