all: program1 program2
program1: StringListDemo.o
gcc -Wall -std=c11 -Iinclude src/StringListDemo.c src/LinkedListAPI.c -o program1
program2: StructListDemo.o
gcc -Wall -std=c11 -Iinclude src/StructListDemo.c src/LinkedListAPI.c -o program2
试图用主要功能的两个文件编译文件夹,但不断出错。
make: *** No rule to make target `StringListDemo.o', needed by `program1'. Stop.
最佳答案
由于您提到了StringListDemo.o
,但没有给出任何规则,因此make
寻找一个implicit rule来指示如何更新它。换句话说,make
查找显然在当前目录中不存在的StringListDemo.c
文件。但是,您还提到了src/StringListDemo.c
,而program1
目标显然取决于它。因此,您应该将先决条件列表中的StringListDemo.o
更改为src/StringListDemo.o
:
program1: src/StringListDemo.o
同样的逻辑适用于
program2
。如果
src/StringListDemo.c
应该使用特殊选项进行编译(与默认选项不同),则显式添加StringListDemo.o
目标,例如:StringListDemo.o: src/StringListDemo.c
gcc ...