大佬教程收集整理的这篇文章主要介绍了c – 带有许多旗帜的Makefiile,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解Makefile应该是什么样子,当涉及到标志,尤其是链接标志时.这是我的Makefile:
OBJS = n.o
sourcE = n.cpp
# HEADER = there are no header files,so I commented that
OUT = test
CXX = ../mpich-install/bin/mpic++
FLAGS = -I../intel/mkl/include ../intel/mkl/lib/intel64/libmkl_scalapack_ilP64.a -Wl,--start-group ../intel/mkl/lib/intel64/libmkl_intel_ilP64.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_ilP64.a -lpthread -lm -ldl
all: $(OBJS)
$(CXX) $(OBJS) -o $(OUT) $(FLAGS)
# create/compile the individual files >>separately< n.o:="" n.cpp="" $(cxx)="" -c="" n.cpp="" $(flags)="" .phony="" :="" all="" #="" clean="" house="" clean:="" rm="" -f="" $(objs)="">
然后我得到:
../mpich-install/bin/mpic++ -c n.cpp -I../intel/mkl/include ../intel/mkl/lib/intel64/libmkl_scalapack_ilP64.a -Wl,--start-group ../intel/mkl/lib/intel64/libmkl_intel_ilP64.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_ilP64.a -lpthread -lm -ldl
g++: warning: ../intel/mkl/lib/intel64/libmkl_scalapack_ilP64.a: linker input file unused because linking not done
g++: warning: ../intel/mkl/lib/intel64/libmkl_intel_ilP64.a: linker input file unused because linking not done
g++: warning: ../intel/mkl/lib/intel64/libmkl_core.a: linker input file unused because linking not done
g++: warning: ../intel/mkl/lib/intel64/libmkl_sequential.a: linker input file unused because linking not done
g++: warning: ../intel/mkl/lib/intel64/libmkl_blacs_intelmpi_ilP64.a: linker input file unused because linking not done
../mpich-install/bin/mpic++ n.o -o test -I../intel/mkl/include ../intel/mkl/lib/intel64/libmkl_scalapack_ilP64.a -Wl,--end-group ../intel/mkl/lib/intel64/libmkl_blacs_intelmpi_ilP64.a -lpthread -lm -ldl
这意味着我应该只在进程的最后部分使用一些标志.处理这种情况的正确方法是什么?也许创建FLAGS1和FLAGS2?它应该工作,但我想知道哪种方法正确.
正确的方法是跟上make标准变量名,特别是CXXFLAGS和LDFLAGs.
FLAGS = ... ../intel/mkl/lib/intel64/libmkl_scalapack_ilP64.a
您应该使用标准LDFLAGS makefile变量来设置路径,而不是使用FLAGS并提供直接主题进行链接,并让链接器找到适当的静态或共享库:
LDFLAGS += -l../intel/mkl/lib/intel64 -lmkl_scalapack_ilP64
# ^^^^^^^ Note the standard build system uses $(LDFLAGS) at the linker stage rule
# -L specifies the paths for finding libraries
# -l .so.
all: $(OBJS)
$(CXX) $(OBJS) -o $(OUT) $(CXXFLAGS) $(LDFLAGS)
# ^^^^^^^^^^ Use them separately at
# linking stage
make -f Makefile clean
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This whole line looks very (!!!) suspicIoUs,# and would just make it harder to debug your
# build system. It's an inDicator,you did
# dependencies management wrong.
# Consider to use the compiler's --MF options
# family,to create a dependency file for the
# headers,and include it in your makefile.
区别于编译阶段标志(CXXFLAGS)和链接阶段标志(LDFLAGS).
在旁边:
为了避免这种情况
@H_190_19@make -f Makefile clean
最终目标规则中的操作(可能已添加以避免错过以赶上标头依赖关系),向CXXFLAGS添加-MF选项,并包括结果.
以下是有关各种技术的更详细信息:
以上是大佬教程为你收集整理的c – 带有许多旗帜的Makefiile全部内容,希望文章能够帮你解决c – 带有许多旗帜的Makefiile所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。