首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sed或其他方法替换Makefile中的特定字符串

如何使用sed或其他方法替换Makefile中的特定字符串
EN

Stack Overflow用户
提问于 2020-04-13 05:34:39
回答 2查看 35关注 0票数 0

我回来后,一些用户试图把我的所有帖子的底片,只是与坏整数,我不能再张贴任何问题。在那之后,就直截了当了。

我需要帮助来编辑一个生成文件,更具体地说,从"mupen64plus-ui“-> https://github.com/robalni/mupen64plus-ui生成文件

原始行:

代码语言:javascript
复制
INCPATH       = -I. -isystem /usr/include/SDL2 
-isystem /usr/local/include/mupen64plus
 -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/qt5/QtXml -isystem /usr/include/qt5/QtSql -isystem /usr/include/qt5/QtCore -I. -isystem /usr/include/libdrm -I. -I/usr/lib64/qt5/mkspecs/linux-g++

我需要:

代码语言:javascript
复制
INCPATH       = -I. -isystem /usr/include/SDL2 
-isystem "$TARGETDIR/include"
 -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/qt5/QtXml -isystem /usr/include/qt5/QtSql -isystem /usr/include/qt5/QtCore -I. -isystem /usr/include/libdrm -I. -I/usr/lib64/qt5/mkspecs/linux-g++

您会注意到,我只需要更改一个非常具体的细节,并替换为我的脚本中一个变量上的内容,现在就是Makefile可以找到文件的第18行: m64p_common.h、m64p_types.h、m64p_frontend.h、m64p_config.h

在没有错误的情况下完成编译。

我需要理解的另一件事是下面的几行:

代码语言:javascript
复制
LFLAGS        = -L/usr/lib64 -Wl,-O1
LIBS          = $(SUBLIBS) -lquazip5 -lSDL2 -lmupen64plus -ldl -lQt5Widgets -lQt5Gui -lQt5Network -lQt5Xml -lQt5Sql -lQt5Core -lGL -lpthread

当我尝试编译时,输出显示找不到"lmupen64plus“我认为是在/usr/lib64中搜索文件"libmupen64plus.so.2”,但在那里永远找不到,因为我没有编译系统的模拟器和他的文件,只是编译到另一个地方的一个非常具体的前缀。

好吧,我不知道如何指示Makefile在"$TARGETDIR/lib“中进行搜索,以查找库可以无错误地编译。

如果你想或者需要检查整个脚本,有很多西班牙语的文字注释,你可以访问-> https://pastebin.com/mxwxHc6P

好吧,我希望有人能帮助我完成我的宏脚本下载,编译和安装Makefile的mupen64plus-ui部分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-13 05:48:30

第一部分很简单。不知道为什么你想要sed而不是手动编辑。

代码语言:javascript
复制
sed -i "bak" -e 's#/usr/local/include/mupen64plus#"$TARGETDIR/include"#' Makefile

你已经在第二部分的轨道上了。包括所需的搜索路径,如:

代码语言:javascript
复制
LFLAGS        = -L/usr/lib64 -Wl,-O1

变成:

代码语言:javascript
复制
LFLAGS        = -L/usr/lib64 -L$TARGETDIR/lib -Wl,-O1

确保在Makefile中使用$TARGETDIR之前定义了它。如果TARGETDIR中有空格,那么您需要在其中加上引号。

票数 1
EN

Stack Overflow用户

发布于 2020-04-13 06:13:23

非常感谢,我使用下面的代码

代码语言:javascript
复制
sed -i "Makefile" -e "s#/usr/local/include/mupen64plus#$TARGETDIR/include#" Makefile

sed -i "Makefile" -e "s#LFLAGS        = -L/usr/lib64 -Wl,-O1#LFLAGS        = -L/usr/lib64 -L$TARGETDIR/lib -Wl,-O1#" Makefile

谢谢解决这个版本,但是我还不会编译,输出仍然是

代码语言:javascript
复制
g++ -L/usr/lib64 -L/media/Compartido/Videojuegos/Linux/Emulador/mupen64plus/64Bits/lib -Wl,-O1 -o mupen64plus main.o cheatparse.o common.o core.o mainwindow.o error.o plugin.o sdl.o settings.o configcontrolcollection.o keyspec.o aboutguidialog.o cheatdialog.o cheattree.o configeditor.o downloaddialog.o gamesettingsdialog.o inputdialog.o logdialog.o pluginconfigdialog.o settingsdialog.o emulation.o emuthread.o glwindow.o vidext.o osal_dynamiclib.o romcollection.o thegamesdbscraper.o gridview.o listview.o tableview.o clickablewidget.o treewidgetitem.o qrc_mupen64plus.o moc_mainwindow.o moc_aboutguidialog.o moc_cheatdialog.o moc_cheattree.o moc_configeditor.o moc_downloaddialog.o moc_gamesettingsdialog.o moc_inputdialog.o moc_logdialog.o moc_pluginconfigdialog.o moc_settingsdialog.o moc_emulation.o moc_emuthread.o moc_romcollection.o moc_thegamesdbscraper.o moc_gridview.o moc_listview.o moc_tableview.o moc_clickablewidget.o   -lquazip5 -lSDL2 -lmupen64plus -ldl -lQt5Widgets -lQt5Gui -lQt5Network -lQt5Xml -lQt5Sql -lQt5Core -lGL -lpthread 
/usr/lib64/gcc/x86_64-slackware-linux/5.5.0/../../../../x86_64-slackware-linux/bin/ld: no se puede encontrar -lmupen64plus
collect2: error: ld devolvió el estado de salida 1
Makefile:420: fallo en las instrucciones para el objetivo 'mupen64plus'
make: *** [mupen64plus] Error 1

好吧,我找不到-lmupen64plus,但我不明白我需要什么来解决它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61178469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档