Makefile:将源,头,共享库文件编译到输出目录中

时间:2015-08-10 09:42:52

标签: c gcc makefile dependencies gnu-make

我是makefiles的新手

有很多选择可供探索。我刚刚尝试过简单的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文件以某种方式测试在这些项目中声明的某些代码的功能。

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

test.c文件#include项目1和项目2中的一些源.c文件,同时它还引用项目2中的.h文件。我也注意到它抛出一些&#34;未定义的<function_name>&#34;并且此函数名称在.h文件上没有实现,因此我假设其实现属于共享库文件。

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

1 个答案:

答案 0 :(得分:2)

  

[...]我如何通过makefile将所有这些组合在一起,而无需探索数千行的大量文件,只是为了了解整个结构?

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

来自gcc's documentation

  

-M

     

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