加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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和通过输出读取会指出这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读