0

我正在使用下面的命令来编译我的 c++ 代码,它正在使用 OpenCV 库,我的命令就像

    opencv main.cpp -o binary_name

其中 opencv 是一个别名命令,例如

alias opencv="g++ `pkg-config --cflags opencv`  `pkg-config --libs opencv`"

但如果我忘记了“-o binary_name”,该命令会删除我的源文件。为什么会这样……?

我应该对上面的别名命令进行什么修改来编译我的源文件,比如

   opencv main.cpp binary_name  

提前致谢.......

4

2 回答 2

1

您可以使用函数而不是别名,并使用参数:

function opencv() { g++ `pkg-config --cflags opencv` `pkg-config --libs opencv` "$1" -o "$2"; }
于 2012-11-05T06:51:28.923 回答
1

参数的顺序gcc很重要,源文件或目标文件应该在库之前给出,并且库应该在它们使用的低级库之前被更高级别的库调用。

所以你应该编译

    g++ -Wall -g $(pkg-config --cflags opencv) main.cpp \
              $(pkg-config --libs opencv) -o binaryprog

但是你真的应该使用 a Makefile,或者至少有一个 shellscript。

不要忘记-Wall获取所有警告的选项。改进你的代码,直到编译器没有给出警告。使用该-g选项获取调试信息,以便能够用于gdb ./binaryprog调试您的程序。

一旦你的程序被调试,替换-g-O3(或者可能是-O2 -g)以要求 GCC 优化生成的代码。

于 2012-11-05T07:47:57.190 回答