【问题标题】:Compile entire C project instead of few files编译整个 C 项目而不是几个文件
【发布时间】:2018-10-20 20:21:17
【问题描述】:

我有一个用 C 语言制作的整个库。它有近 10 个文件夹,里面有很多文件。

我在根文件夹中创建了一个 filename.c 文件,并尝试在 mac 中使用 gcc test.c -o test 编译它,但它不包括头文件。一般我要添加所有的头文件gcc test.c libaudio.c -o test

如何编译整个项目,而不是只编译一个文件。

【问题讨论】:

  • 您使用“头文件”一词来描述名为“libaudio.c”的东西让我感到困惑。
  • 您是否研究过make 工具提供的处理多个文件的功能?
  • @Yunnosch 我很抱歉。

标签: c gcc makefile terminal


【解决方案1】:

Makefile 将解决您的问题。您可以创建自己的规则来清除项目(删除生成的文件),构建项目指示您的编译器在哪里(编译位于某些特定路径、扩展名等的源文件),设置输出路径等,无需输入一个大的编译顺序。

https://www.gnu.org/software/make/manual/make.html

编辑:在那里您将能够找到如何通过 makefile 将共享、静态或原始库添加到您的项目中。

【讨论】:

    【解决方案2】:

    使用Makefilemake 读取Makefile 中的配置的实用程序将自动运行各个命令,因此您只需命名您希望重建的项目。

    make myprogram
    

    make 将使用存储在Makefile 规则中的依赖信息来确定哪些其他元素“过时”,重新构建这些元素并将它们组装到myprogram 中。

    This is a decent "first time" tutorial for "make".

    Here is the full blown documentation for "make"

    一旦您掌握了 make 中的概念,您就可以使用其他工具使维护 Makefiles 更容易、更便携,或两者兼而有之。

    一些改进“make”的工具包括“cmake”、“automake”、“the autotools collection”、“scons”、“waf”、“rake”、“doit”、“ninja”、“tup”、 “重做”和“清酒”。还有更多,有些是特定于编程语言的,或者仅限于特定环境。

    我之所以推荐“make”而不是其他工具是因为“make”是一个始终存在的基线,并且在您获得足够的“制作”。

    【讨论】:

    • 同意 Make,如果我尝试编译别人的项目并且它使用 ninja 或 cmake ......最好“工作”,因为我真的没有耐心去学习别人的构建系统只是尝试一下
    【解决方案3】:

    在 C 中,项目的概念不是语言的一部分,它通常取决于您必须构建的工具/平台/库。

    在基于 Linux 的平台上,您可能有一个描述项目的 makefile,或者库可能有一个 cmake 脚本。

    您应该能够在库文档中找到构建说明。

    【讨论】:

      【解决方案4】:

      我绝对推荐 make 方法,因为它是可扩展的。

      如果你真的只有几个文件,gcc 将在命令行上接受多个 .c 文件并将它们全部链接以生成一个可执行文件。

      【讨论】:

        猜你喜欢
        • 2021-02-20
        • 1970-01-01
        • 2017-08-23
        • 1970-01-01
        • 2023-03-28
        • 2015-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多