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

c – 带有许多旗帜的Makefiile

发布时间:2020-12-13 18:58:36 所属栏目:Linux 来源:网络整理
导读:我试图了解Makefile应该是什么样子,当涉及到标志,尤其是链接标志时.这是我的Makefile: OBJS = n.oSOURCE = n.cpp# HEADER = there are no header files,so I commented thatOUT = testCXX = ../mpich-install/bin/mpic++FLAGS = -I../intel/mkl/include ../

我试图了解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?它应该工作,但我想知道哪种方法正确.

最佳答案

“… but I want to know which the correct way.”

正确的方法是跟上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

区别于编译阶段标志(CXXFLAGS)和链接阶段标志(LDFLAGS).

在旁边:

为了避免这种情况

make    -f      Makefile        clean

最终目标规则中的操作(可能已添加以避免错过以赶上标头依赖关系),向CXXFLAGS添加-MF选项,并包括结果.

以下是有关各种技术的更详细信息:

Auto-Dependency Generation

(编辑:李大同)

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

    推荐文章
      热点阅读