gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:21:29 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com