gpt4 book ai didi

c++ - 用于编译多个 mex 函数的 Makefile

转载 作者:行者123 更新时间:2023-11-28 00:02:29 25 4
gpt4 key购买 nike

我运行以下 makefile 来编译 mex 函数:

    SRC:=$(wildcard ./source/*.c)
all: $(SRC)
for file in $^ ; do \
mex -outdir matlab/ -output $@ $$file CC=mpicc CXX=mpicxx COPTIMFLAGS="-O2 -DNDEBUG" LDOPTIMFLAGS="-O2"; \
done
.PHONY: clean
clean:
rm ./matlab/*.mexa64

即使我修改了一个文件,代码也会编译所有文件。
我创建了一个 makefile,认为只有修改后的文件会被编译,而不是全部。我目前无法找到一种方法来做到这一点。编译所有文件以对其中一个文件进行最细微的更改非常耗时,因为我有大约 50 个文件要编译。
任何帮助表示赞赏。
如果我不清楚任何地方,请告诉我。

最佳答案

您正在重建所有的 mex 文件,因为 1) 您正在循环遍历 $^ 变量,它包含所有的先决条件,而不仅仅是那些有自上次修改目标以来发生了更改,并且 2) 您正在使用虚假目标 all,因此 Make 继续执行规则,尝试重建该文件。

您可以通过更改单个字符来解决第一个问题; $? 变量包含比目标更新的先决条件列表。但这并不能解决第二个问题。更好的方法是放弃 for 循环并使用 Make 本身:

SRC := $(wildcard ./source/*.c)
TARGS := $(patsubst ./source/*.c, ./matlab/*.mexa64, $(SRC))

all: $(TARGS)

./matlab/%.mexa64: ./source/%.c
mex -outdir matlab/ -output all $*.mexa64 CC=mpicc CXX=mpicxx COPTIMFLAGS="-O2 -DNDEBUG" LDOPTIMFLAGS="-O2";

关于c++ - 用于编译多个 mex 函数的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37799906/

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