c – 如果不需要,请避免在Make中链接和编译
发布时间:2020-12-16 09:58:27 所属栏目:百科 来源:网络整理
导读:作为 here的后续问题:即使代码中没有任何更改,我的Makefile也会进行链接.为什么?如何避免这种行为,如果代码没有改变,make将不会做任何事情? OBJS = main_no_mkl.oSOURCE = main_no_mkl.cppHEADER = IO.hOUT = testCXX = ../../mpich-install/bin/mpic++CX
作为
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 解决方法
问题是你的目标.它不会生成所有(并标记为.PHONY)文件.检查此
answer以获取有关.PHONY的提醒. (你违反了第二个
Rule of Makefiles.)
所以你运行的第二个/ etc时间(假设.PHONY标记不存在)make将查找所有文件,而不是找到它,并假设它必须再次创建它. 使用.PHONY,您可以将文件查找逻辑短路,并始终假定它需要再次运行配方. 所以,基本上,你已经告诉make总是运行链接步骤,所以make就是这样. 用这个来解决这个问题. all: $(OUT) $(OUT): $(OBJS) $(CXX) $(OBJS) -o $(OUT) $(CXXFLAGS) $(LDFLAGS) 对于记录运行make -d和通过输出读取会指出这一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |