【问题标题】:Makefile: compile source, header, shared library files into an output directoryMakefile:编译源码、头文件、共享库文件到输出目录
【发布时间】:2015-11-02 04:13:29
【问题描述】:

我是 makefile 新手

有很多选择可供探索。我刚刚尝试了简单的 makefile,涉及在同一位置编译 .c 文件及其对应的 .h 文件,但我遇到了编译大型项目只是为了观察其某种输出的问题。

结构是这样的:

对于项目 1:

/maindirectory/project1/include/.h files
/maindirectory/project1/source/.c files
/maindirectory/project1/sharedlibrary/.so files

对于项目 2:

/maindirectory/project2/include/.h files
/maindirectory/project2/source/.c files
/maindirectory/project2/sharedlibrary/ .so files

现在有一个“测试”.c 文件以某种方式测试这些项目中声明的某些代码的功能。

现在我知道这个测试文件应该与 1 和 2 的整个项目目录一起位于 /maindirectory/test.c 中,并创建一个 makefile 来构建所有必要的依赖项。

test.c 文件 #includes 项目 1 和项目 2 中的一些源 .c 文件,同时它还引用了项目 2 中的 .h 文件。我还注意到它抛出了一些“对 @987654332 的未定义引用@" 并且这个函数名在.h文件上没有实现,所以我假设它的实现属于一个共享库文件。

我需要帮助/指导/说明如何通过 makefile 将所有这些组合在一起,而无需为了了解整个结构而探索具有数千行代码的大量文件?

【问题讨论】:

  • 包含 c 文件对我来说没有意义。你能解释一下为什么要包含一个 c 文件吗?
  • @nitzanms:是的,包含.c 文件是不常见的,它是否有意义(或没有意义)是另一回事,我想说,这取决于具体的需求。跨度>
  • 这就是我问这个的原因。

标签: c gcc makefile dependencies gnu-make


【解决方案1】:

[...] 我怎样才能通过 makefile 将所有这些组合起来,而无需为了了解整个结构而探索数千行的大量文件?

gcc(或更准确地说是它的预处理器)提供了-M 选项来列出依赖项。

来自gcc's documentation

-M

输出一个适合make描述主源文件依赖关系的规则,而不是输出预处理的结果。预处理器输出一个make 规则,其中包含该源文件的目标文件名、冒号和所有包含文件的名称,包括来自-include-imacros 命令行选项的文件。

【讨论】:

  • @user3115201:这为您提供了编译源代码所需的依赖项,而不是链接它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2012-10-19
相关资源
最近更新 更多