c - Makefile 文件位于不同文件夹中

标签 c makefile

我是 makefile 新手,我正在尝试编写一个编译来自不同文件夹的文件的文件。您可以在我添加到帖子中的 tree 命令的输出中看到我的文件分布: 我希望我的头文件位于includes文件夹中,一些库文件位于srclib中,我的主要源文件位于src中,生成的.o位于lib中。首先,我尝试了递归 makefile,但无法编译 tcp.c,因为编译器找不到 tcp.h,我陷入困境。

Output tree command

.
|-- includes
|   `-- tcp.h
|-- lib
|-- makefile
|-- src
|   |-- cliente.c
|   `-- servidor_preforked.c
`-- srclib
    `-- tcp.c

最佳答案

您需要指示在哪里可以找到编译器的 header ,对于gcc,这是使用选项-I

例如,如果您在 lib 中生成 a.out,您的 makefile 可以是:

lib/a.out:
    gcc -o lib/a.out -I includes srclib/tcp.c src/cliente.c src/servidor_preforked.c
<小时/>

To 还会在 lib 中生成对象:

all::lib/a.out

GCC = gcc -ansi -pedantic -Wextra

lib/tcp.o : srclib/tcp.c includes/tcp.h
    $(GCC) -c -o lib/tcp.o  -I includes srclib/tcp.c

lib/cliente.o : src/cliente.c includes/tcp.h
    $(GCC) -c -o lib/cliente.o  -I includes src/cliente.c

lib/servidor_preforked.o : src/servidor_preforked.c includes/tcp.h
    $(GCC) -c -o lib/servidor_preforked.o  -I includes src/servidor_preforked.c

lib/a.out : lib/tcp.o lib/cliente.o lib/servidor_preforked.o
    $(GCC) -o lib/a.out -I includes lib/tcp.o lib/cliente.o lib/servidor_preforked.o

示例:

pi@raspberrypi:/tmp/d $ rm lib/*
pi@raspberrypi:/tmp/d $ make
gcc -ansi -pedantic -Wextra -c -o lib/tcp.o  -I includes srclib/tcp.c
gcc -ansi -pedantic -Wextra -c -o lib/cliente.o  -I includes src/cliente.c
gcc -ansi -pedantic -Wextra -c -o lib/servidor_preforked.o  -I includes src/servidor_preforked.c
gcc -ansi -pedantic -Wextra -o lib/a.out -I includes lib/tcp.o lib/cliente.o lib/servidor_preforked.o
pi@raspberrypi:/tmp/d $ ls -l lib
total 24
-rwxr-xr-x 1 pi pi 8208 févr. 23 18:15 a.out
-rw-r--r-- 1 pi pi  956 févr. 23 18:15 cliente.o
-rw-r--r-- 1 pi pi  856 févr. 23 18:15 servidor_preforked.o
-rw-r--r-- 1 pi pi  840 févr. 23 18:15 tcp.o

关于c - Makefile 文件位于不同文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843591/

相关文章:

谁能告诉我有关带图表的反向链表的信息?

CLion 建议使用 'strtol' 而不是 'scanf'

linux - 使 :No rule to make target install. 停止 openldap

c++ - 使用 "addinclude unistd"修改 Makefile

Makefile 作为带有 shebang 的可执行脚本?

c - 使用GCC在C中进行函数重载-具有多个参数的函数

c++ - C++中 "extern"语句的确切含义是什么?

c++ - 克服rpc字节顺序转换

compilation - make[n] 中的 [n] 是什么意思?

c++ - 为 Qt 创建 moc 文件