【问题标题】:Cannot specify -c with multiple files无法为多个文件指定 -c
【发布时间】:2012-11-07 11:11:13
【问题描述】:

我的makefile 遇到了这个问题:

gcc -c src/uno.c src/uno.h -o src/uno.o
gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files

如何创建一个包含多个文件的.o 文件?

【问题讨论】:

  • 您希望它们真的是一个 .o 文件,还是一个存档文件 .a 文件,或者只是将它们全部链接起来以实现从多个 .c 文件构建的最终可执行文件?
  • 一次性编译/链接时不需要-c,这里只使用-o。同样按照约定,标头 (.h) 包含在模块 (.c) 文件中。因此不会直接传递给编译器。
  • 无论如何,查看makefile 的相关部分会有所帮助。
  • 我需要 e 几个 .o 并在将它们全部链接后......但我需要像 MvG 的答案一样的#include

标签: c file gcc makefile


【解决方案1】:

头文件(在这种情况下为src/uno.h)是从文件中引用的,不应在命令行上再次命名:

gcc -c src/uno.c -o src/uno.o

您可能必须使用-I 标志来命名找到它们的目录。但是,如果您在源代码中 #include "uno.h",那么 gcc 将已经找到该文件,因为它会在同样包含 uno.c 的目录中搜索它。

您可以编译多个文件并将它们链接到单个二进制文件中,例如

gcc -o myApp myAppMain.c myAppUtil.c myAppStuff.c

但这意味着如果单个源发生更改,您将不得不重新编译所有内容,因为中间对象不会保留。如果您使用目标文件,每个翻译单元总是有一个编译器调用。

有一个预编译头文件的功能,但在这种情况下,您只编译头文件,而不是uno.c 文件。无论如何,这是相当先进的,所以你可能不需要它。

【讨论】:

  • 已批准,这就是答案! :D ty
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
相关资源
最近更新 更多