gpt4 book ai didi

c++ - 如果不需要,避免在 Make 中链接和编译

转载 作者:太空狗 更新时间:2023-10-29 20:11:49 26 4
gpt4 key购买 nike

作为来自 here 的后续问题: 我的 Makefile 将进行链接,即使代码中没有任何更改。为什么?我怎样才能避免这种行为,以便 make 在代码未更改的情况下不会执行任何操作?

OBJS    = main_no_mkl.o
SOURCE = main_no_mkl.cpp
HEADER = IO.h
OUT = test
CXX = ../../mpich-install/bin/mpic++
CXXFLAGS = -I../../intel/mkl/include -Wl,--start-group -Wl,--end-group -lpthread -lm -ldl -Wall
LDFLAGS = ../../intel/mkl/lib/intel64/libmkl_scalapack_lp64.a -Wl,--start-group ../../intel/mkl/lib/intel64/libmkl_intel_lp64.a ../../intel/mkl/lib/intel64/libmkl_core.a ../../intel/mkl/lib/intel64/libmkl_sequential.a -Wl,--end-group ../../intel/mkl/lib/intel64/libmkl_blacs_intelmpi_lp64.a -lpthread -lm -ldl

all: $(OBJS)
$(CXX) $(OBJS) -o $(OUT) $(CXXFLAGS) $(LDFLAGS)

# create/compile the individual files >>separately<<
main_no_mkl.o: main_no_mkl.cpp
$(CXX) -c main_no_mkl.cpp $(CXXFLAGS)

.PHONY : all

最佳答案

问题是您的 all 目标。它不会生成all(也被标记为.PHONY)文件。检查此 answer 以获取有关 .PHONY 的提醒。 (你违反了第二个 Rule of Makefiles 。)

所以第二次/等你运行 make(假设 .PHONY 标记不存在)make 会寻找一个 all文件,找不到它,并假设它必须重新创建它。

使用 .PHONY,您可以将文件查找逻辑短路,并让始终假设它需要再次运行配方。

因此,从本质上讲,您已经告诉 make 始终运行链接步骤,所以 make 会这样做。

改用它来解决该问题。

all: $(OUT)

$(OUT): $(OBJS)
$(CXX) $(OBJS) -o $(OUT) $(CXXFLAGS) $(LDFLAGS)

根据记录,运行 make -d 并通读输出会向您指出这一点。

关于c++ - 如果不需要,避免在 Make 中链接和编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31164161/

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