gpt4 book ai didi

一主两从的正确makefile

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:56 25 4
gpt4 key购买 nike

我试图为一个多线程程序编写一个 makefile,该程序有一个执行两个从属进程的主进程。还有一个图书馆(供主人和奴隶使用)。

我不确定我应该如何编译这个库。

但有时,在文件上修改一个,makefile 命令不会重新编译它(它说与'all'无关)。

我试过这样写(Ubuntu):

all:executable

executable: slave1 slave 2 executable.o
gcc -o executable executable.o

slave1: slave1.o
gcc -o slave1 slave1.o

slave2: slave2.o
gcc -o slave2 slave2.o

library.o : library.c
gcc -c library.c

executable.o: executable.c
gcc -c executable.c

slave1.o: slave1.c
gcc -c slave1.c

slave2.o: slave2.c
gcc -c slave2.c

我也试过:

all:executable

executable: slave1 slave2
gcc -g -o executable executable.c

slave1:
gcc -g -o slave1 slave1.c library.c-lm

slave2:
gcc -g -o slave2 slave2.c library.c -lm

程序结构是这样定义的:

executable.c,slave1.c,slave2.c,library.c包含library.h

可执行运行slave1和slave 2

最佳答案

您的 makefile 完全错误。 makefile的一般结构如下:

target: prerequisite1 prerequisite2 ...
commands to make target (most probably using prerequisites)

所以:

all:executable

要使all 成为目标,我们必须使可执行。对。

executable: slave1 slave 2 executable.o
gcc -o executable executable.o

从这些行看来,executable 依赖于 slave1slave2executable .o。下面的命令仅使用 executable.o 来创建 executable,因此有不必要的先决条件(和错字)。

下一步:

slave1: slave1.o
gcc -o slave1 slave1.o

slave2: slave2.o
gcc -o slave2 slave2.o

看起来不错,直到您不需要 library.o 来构建它们。

下一步:

library.o : library.c
gcc -c library.c

此处是 library.o,但它未使用作为任何目标的先决条件。所以它根本不会被构建。

executable.o: executable.c
gcc -c executable.c

slave1.o: slave1.c
gcc -c slave1.c

slave2.o: slave2.c
gcc -c slave2.c

那些看起来不错,但是 gcc 命令缺少 -o module.o 部分。

因此,如您所见,您的 makefile 几乎在所有可能的层面上都是错误的。

这是可以工作的 makefile。它可能更(更多)更紧凑,但为了清楚起见,我会这样写:

all: executable slave1 slave2

executable: executable.c
gcc -g -o executable executable.c

slave1: slave1.c library.c library.h
gcc -g -o slave1 slave1.c library.c -lm

slave2: slave2.c library.c library.h
gcc -g -o slave2 slave2.c library.c -lm

如您所见,这很简单。为了制作all,我们必须构建executableslave1slave2executable依赖executable.c,每个slaveX二进制依赖slaveX.c库。 clibrary.h 源代码。如果任何源文件发生变化,make 将重新编译目标。瞧。

关于一主两从的正确makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886984/

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