c - 尝试创建 *.o 时出错

标签 c makefile

由于我从我的 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/

相关文章:

c - 字符串按字母顺序排列的字符数

python - 在 ubuntu hadoop 独立安装 HUE 时找不到模块 saml2

CUDA 地址越界

c++ - 编译 CUDA 文件、C 文件和 Cuda 头文件

c - 使用register_chrdev动态分配主编号时,保留256个次编号有什么意义吗?

linux - gnu makefile 通过要忽略的文件夹列表过滤源文件列表

c - 使用 C 语言编写的 Linux Shell 的 Makefile 时出错

makefile - 创建 autotools 构建源的调试版本

c++ - 更改目录然后编译代码的 Makefile

java - SVG/vector 图形对象 boolean 运算(并集、交集、减法)