makefile : 如何链接目标文件

Posted

技术标签:

【中文标题】makefile : 如何链接目标文件【英文标题】:makefile : How to link object files 【发布时间】:2019-08-10 18:10:58 【问题描述】:

我有 makefile,我需要将两个对象链接到“主”对象中

它们是 -> oglinet.o 和 libshape.o

他们在系统中的路径 -> home/pi/openvg/

问题:我需要编写完整路径和对象名称(home/pi/openvg/libshapes.o)可以将它们“制作”为 Makefile 变量,例如 home/pi/openvg/libshape.o 到 $(OBJ1 ) 在 makefile 规则中?

试图将它们设为变量,例如 Obj1= /home/pi/openvg/oglinit.o 如果我编译编译器释放出来。

工作 Makefile

#NOT IDEAL MAKEFILE BUT WORKING!!!!!

INCLUDEFLAGS = -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -I/home/pi/openvg
LIBFLAGS = -L/opt/vc/lib -lbrcmEGL -lbrcmGLESv2 -lbcm_host -lpthread  -ljpeg

main:main.cpp 
        g++ -Wall $(INCLUDEFLAGS) -o main  main.cpp $(LIBFLAGS) home/pi/openvg/libshapes.o /home/pi/openvg/oglinit.o

期望: 什么 libshape.o 和 oglinit.o 对象和系统中的路径被“存储”在某种变量/变量中 如果需要,我可以轻松地在 makefile 中进行更改 /

在 Chriss Dodd 的帮助下(不理想?)makefile 看起来像这样

INCLUDEFLAGS = -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -I/home/pi/openvg
LIBFLAGS = -L/opt/vc/lib -lbrcmEGL -lbrcmGLESv2 -lbcm_host -lpthread  -ljpeg

OPENVG=/home/pi/openvg

App: main.cpp $(OPENVG)/libshapes.o $(OPENVG)/oglinit.o
    g++ -Wall  -o $@  $^ $(LIBFLAGS) $(INCLUDEFLAGS)

【问题讨论】:

是否可以重新措辞您的帖子?我的朋友很难理解你想要什么帮助。 再试一次,在我的大脑中发现了发文逻辑的脉络/// 【参考方案1】:

您通常希望将所有目标文件链接到目标的依赖项。然后你可以使用$^。您通常还需要链接器命令行上的所有目标文件之后的所有库。有了这两个,你最终会得到类似的东西:

OPENVG=/home/pi/openvg

main: main.o $(OPENVG)/libshape.o $(OPENVG)/objinit.o
        g++ -Wall -o $@ $^ $(LIBFLAGS)

【讨论】:

Makefile 说 -> make: *** 没有规则来制作目标 'home/pi/openvg/libshape.o','main' 需要。停止。 顺便说一句,您没有添加 $(INCLUDEFLAGS) 有一个错误不是 libshape.o 而是 libshapes.o 而不是 objini.o 而是 oglinit.o 您需要确保要链接的文件存在于您认为存在的位置——消息告诉您它不存在。

以上是关于makefile : 如何链接目标文件的主要内容,如果未能解决你的问题,请参考以下文章

makefile:如何生成目标文件到上层目录

C ++如何将两个makefile对象目标规则(位于另一个文件夹中)组合到一个目标/规则中?

makefile学习

Makefile:如何写目标依赖

Linux之Makefile

从头開始写项目Makefile:统一目标输出文件夹