搜索没有找到任何结果。
如果我有一个文件 main.c 和一对 aux.h 和 aux.c 来实现有用的功能,那么我什么时候应该将 main.c 和 aux.c 一起编译,什么时候应该用 aux 创建一个库(例如 aux .a).
最佳答案
when should I just compile main.c and aux.c together and when should I make a library out of aux (like aux.a).
当您有一个单个实用程序文件时,将其放入库中不会给您带来任何东西。只有当您拥有一些单独的文件(它们提供了一些常见但相关的功能)时,将它们放入存档(或共享)库才有意义。
在构建程序时,您实际上有 3 个选择:
一步即可将所有内容编译并链接在一起:
gcc -o main main.c aux.c
编写正确的
Makefile
。这将导致单独编译:gcc -c main.c
gcc -c aux.c
gcc -o main main.o aux.o
编写一个使用该库的
Makefile
。这也将导致单独编译,例如:gcc -c main.c
gcc -c aux.c
ar cru libaux.a aux.o
gcc -o main main.o -laux
对于除了最小的玩具程序之外的任何程序,您至少应该执行#2,因为这样做可以消除重新编译 aux.c
或 main.c
时浪费的时间。要么没有改变,同时仍然确保您的程序正确构建。
正如我所说,对单个文件执行#3 根本不会购买任何东西(您只是执行了一些不必要的步骤)。
在以下情况下建议使用库:
- 您构建了多个不同的程序,并且
- 您有几个相关的实用程序文件,其中一些(但不是全部)在这些程序中使用。
考虑一下您有 prog1
、prog2
和 prog3
以及 aux1.c
、 的情况>aux2.c
和 aux3.c
实用程序文件。假设 prog1
使用 aux1.c
和 aux2.c
中的代码,prog2
使用 aux1 中的代码.c
和 aux3.c
以及 prog3
使用所有 aux*.c
文件中的代码。
在这种情况下,使用案例 #2,您必须编写如下所示的 Makefile
:
prog1: main1.o aux1.o aux2.o
prog2: main2.o aux1.o aux3.o
prog3: main3.o aux1.o aux2.o aux3.o
这(可能)需要大量的管理工作。
与使用案例 #3(即库)的 Makefile
进行比较:
prog1: main1.o libaux.a
prog2: main2.o libaux.a
prog3: main3.o libaux.a
更简单,不是吗?
还要考虑如果 main1.c
更改 并开始使用 aux3.o
会发生什么。在情况 #2 中,您必须调整 Makefile
,但在情况 #3 中,您的 Makefile
已经正确了!
关于c - 何时一起编译文件以及何时使用库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41434352/