gpt4 book ai didi

c - Makefile路径问题

转载 作者:行者123 更新时间:2023-11-30 16:36:32 25 4
gpt4 key购买 nike

我的 .c 文件位于主 src 目录中的不同子文件夹中,我在运行 Makefile 时遇到问题,我是 Makefile 新手,需要动手操作 Makefile 才能工作并创建静态库。

src/math/addition/add.c (+add.h)

int add(int a, int b) {return a + b;}

src/math/subtraction/sub.c (+sub.h)

 int sub(int a, int b) {return a - b;}

src/math/math.c

 #include "addition/add.h"
#include "subtraction/sub.h"

Makefile(位于项目的根目录)

SRC=src/math/Math.c src/math/Math.h src/math/addition/add.c src/math/addition/add.h src/math/subtraction/sub.c src/math/subtraction/sub.h
INCLUDE_PATH=src/

Math: bin
ar rcs libMath.a Math.o

bin:
mkdir bin/
for dir in $(SRC); do \
cd $$dir; \
gcc -c *.c -I../; \
mv *.o ../../../bin; \
cd -; \
done

如果你相信有更好的方法或任何横向思考,我不会执着于任何事情。

最佳答案

Makefile 擅长两件事:构建依赖关系图以及在依赖关系图中的每个节点之间执行步骤。

如果您可以访问 GNUMake(我们大多数人都可以;它几乎是唯一一个人使用的),您可以使用 VPATH 来整理一下。 VPATH 用于告诉 make 在哪里可以找到源文件。如果不同目录下有多个同名文件,请小心。

我建议您使用类似于以下内容的内容

VPATH := src src/math src/math/addition src/math/subtraction
CFLAGS += -Isrc -Isrc/math -Isrc/mathaddition -Isrc/math/subtraction
all: libMath

libMath: bin/Math.o bin/add.o bin/sub.o
ar rcs libMath bin/Math.o bin/add.o bin/sub.o

bin/%.o: %.c %.h

Make 包含一个默认的 .c -> .o 规则,您可以使用它; %.o: %.c %.h 执行此操作,但也声明所有 .o 文件(默认情况下)都依赖于.c 和一个 .h 文件,其前缀(% 部分)与目标文件相同。

我怀疑您的 Math.o 目标还将依赖于 addition.hsubtraction.h 文件;您可以使用规则 Math.o: Math.c Math.haddition.hsubtraction.hMath.o 声明为依赖于这些文件。

记住用制表符替换 ar 之前的空格。

您可能想要更改组织源文件和/或头文件的方式。

通常 ar 会生成以 .a 结尾的存档文件。您可能也想更改它。

如果你正确使用 make,则可以使用并行构建 (make -J) 来真正加快编译时间;如果你用错了它,一切都会变得更慢,我们还会有另一个人开始讨厌 make,因为他们不理解它。

关于c - Makefile路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48397614/

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