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