别名和 opencv 的问题

别名和 opencv 的问题

我有一个别名定义来编译一个 opencv 程序,如下所示

alias gcv='g++ -I/usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect'

然后我继续输入

gcv imageshow.cpp

我收到一长串错误

在此处输入图片描述

但是当我在包含文件和库文件之间的.cpp(源代码)文件中使用别名中指定的相同命令时(按照这里的建议),一切都进行得很顺利。

g++ -I/usr/local/include/opencv imageshow.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui

现在输入长命令,随着复杂性的增加,该命令会变得更大,每次都变得越来越困难,请帮助我使别名起作用或建议任何其他替代方案。

答案1

尝试不使用别名:

g++ imageshow.cpp -o imageshow `pkg-config --cflags --libs opencv` 

答案2

为什么不使用简单的脚本来代替别名?

归档gcv~/bin/

#/bin/sh 
g++ $* -I/usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect

或者,如果您正在使用,zsh则可以使用文件中定义的函数.zshrc

gcv() { 
    g++ $* -I/usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect;
} 

自动编译器和链接器标志

如果您遇到链接器问题,也可以pkg-config在此处合并:

#/bin/sh 
g++ $* `pkg-config --cflags --libs opencv`

文件名中的空格

虽然其他帖子也涉及类似问题存在,处理文件名中的空格并不是一件容易的事,所以我想在这里重述一个优雅的解决方案;具体来说,我发现利用变量IFS有很大帮助。

因此,进行少量添加,最终得到

#/bin/sh 
IFS=$';'
g++ $* `pkg-config --cflags --libs opencv`

也解决了文件名中的空格问题!

答案3

关于创建 shell 脚本的帖子不是很清楚...这是我创建自己的脚本所遵循的简单过程,即使文件名中有空格它也能工作。

这是我所做的

  • mkdir ~/bin
  • nano ~/bin/gcv
  • sudo chmod u+x ~/bin/gcv
  • 在脚本中输入以下内容

        #!/bin/bash   
        g++ "$@" `pkg-config --libs --cflags opencv`
    
  • export PATH=$PATH:~/bin

  • 输入echo $PATH并确保您看到~/bin您获得的输出中列出的内容。
  • 输入alais如果您看到任何名称的别名,gcv请使用该命令unalias gcv,否则您将无法使用gcv它作为命令来编译代码,可能别名比脚本具有更高的优先级。
  • 即使我的文件名中有空格,脚本也不会出现问题。

相关内容