所以我在下面的Makefile上苦苦挣扎:
src := $(wildcard *.c)
bin := $(src:%.c=out/%)
.PHONY: all
all: $(bin)
.PHONY: clean
clean:
rm -r out
out:
mkdir $@
$(bin): $(src) | out
$(CC) -Iincludes/ -Wall $< -o $@
假设我有以下目录:
$ ls
includes/ Makefile test1.c test2.c
然后,我希望发生以下情况:
$ make
mkdir out
cc -Iincludes/ -Wall test1.c -o out/test2
cc -Iincludes/ -Wall test2.c -o out/test1
但是实际上发生了什么:
$ make
mkdir out
cc -Iincludes/ -Wall test2.c -o out/test2
cc -Iincludes/ -Wall test2.c -o out/test1
我有点不想围绕其他解决方案建议移动文件
我很确定这一定很容易,但是我迷路了。感谢您的帮助。
考虑更改“ $(bin)”规则:
out/%: %.c
$(CC) -Iincludes/ -Wall $< -o $@
现有规则表明每个程序都依赖于所有源文件,并且可以通过编译($ <)FIRST源文件来构建每个程序。修改后的规则表明echh程序依赖于具有相同名称的.c
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句