bra*_*rad 8 c makefile header-files
我用动态语言(javascript,python,haskell等)编写了很多代码,但我现在正在为研究生院学习C,我不知道我在做什么.
最初我使用makefile在一个目录中构建我的所有源代码,该代码运行得相当好.但是,我的项目正在增长,我想将源分成多个目录(单元测试,工具,核心等).例如,我的目录树可能如下所示:
.
|-- src
| |-- foo.c
| |-- foo.h
| `-- main.c
`-- test
`-- test_foo.c
Run Code Online (Sandbox Code Playgroud)
test/test_foo.c
使用src/foo.c
和src/foo.h
.使用makefile,构建它的最佳/标准方法是什么?优选地,将存在用于构建项目的一个规则和用于构建测试的规则.
我知道还有其他方法可以做到这一点,包括autoconf和其他自动解决方案.但是,我想了解发生了什么,并且能够从头开始编写makefile,尽管它可能不切实际.
任何指导或提示将不胜感激.谢谢!
所以到目前为止给出的三个解决方案如下:
include
目录中#include
如#include "../src/foo.h"
-I
开关通知编译器包含位置到目前为止,我喜欢-I
交换机解决方案,因为它不涉及在目录结构更改时更改源代码.
对于 test_foo.c,您只需告诉编译器在哪里可以找到头文件。例如
gcc -I../src -c test_foo.c
Run Code Online (Sandbox Code Playgroud)
然后编译器也会查找这个目录来查找头文件。在 test_foo.c 中你可以这样写:
#include "foo.h"
Run Code Online (Sandbox Code Playgroud)
编辑:要链接到 foo.c,实际上是链接到 foo.o,您需要在目标文件列表中提及它。我假设您已经有了目标文件,然后执行以下操作:
gcc test_foo.o ../src/foo.o -o test
Run Code Online (Sandbox Code Playgroud)