由于我从我的 makefile 中得到这个极其愚蠢的错误,我在这里束手无策。 我最终放弃了将 makefile 精简为两行:
%.o: %.c
gcc -c -o $@ $< -I../inc
命令:制作。输出:
make: *** No targets. Stop.
开头的空格是真正的制表符而不是空格。 c 文件位于同一目录中。如果我给出的不是 %.o,而是 file1.o 和 file1.c 而不是 %.c,那么一切都很好(file1.o 被创建)。不过,我在网上看到很多使用 % 运算符的示例。如果我包含一个 clean: 目标,它会被迅速找到,如下所示:
%.o: %.c
gcc -c -o $@ $< -I../inc
clean:
echo "this is clean!"
命令:制作。输出:
echo "this is clean!"
this is clean!
请帮帮我,因为我完全不知道我的目标出了什么问题。在第二个样本(具有干净目标的那个)中,我猜是找到了干净目标并对其采取了行动,因为第一个样本不知何故“无效”。
最佳答案
看起来你忘了写一个目标。您刚刚编写了如何编译的规则,但还没有编写如何处理这些对象的规则。我的意思是,我想念类似的东西:
my_executable_file: *.o
gcc -o my_executable_file *.o
编辑:
之前设置的是真的,你需要一个目标。但是因为你只想编译,你的目标应该是这样的:
OBJECTS = file.o #and whatever objects you need, as a list separated by commas
然后是你的目标:
my_objects: $(OBJECTS)
所以把它们放在一起:
OBJECTS = file.o #and whatever objects you need, as a list separated by commas
my_objects: $(OBJECTS)
%.o: %.c
gcc -c -o $@ $< -I../inc
关于c - 尝试创建 *.o 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25442808/