Experimente sem usar aliases:
g++ imageshow.cpp -o imageshow 'pkg-config --cflags --libs opencv'
Eu tenho um alias definido para compilar um programa operacional que é assim
alias gcv='g++ -I/usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect'
Então eu vou digitar
gcv imageshow.cpp
Eu recebo esta longa lista de erros
Mas quando eu uso o mesmo comando especificado no alias com o arquivo .cpp (código fonte) entre os arquivos Include e Library ( seguindo a sugestão aqui ), tudo funciona como um encanto.
g++ -I/usr/local/include/opencv imageshow.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui
Agora, digitando o comando longo, que fica ainda maior à medida que a complexidade aumenta, cada vez está ficando difícil, por favor, ajude-me a colocar o alias para funcionar ou sugira qualquer outra alternativa.
Experimente sem usar aliases:
g++ imageshow.cpp -o imageshow 'pkg-config --cflags --libs opencv'
Por que não usar um script simples em vez do alias?
arquivo gcv
em ~/bin/
#/bin/sh
g++ $* -I/usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect
Como alternativa, se você estiver usando zsh
, poderá usar uma função definida no seu arquivo .zshrc
:
gcv() {
g++ $* -I/usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect;
}
Sinalizadores automatizados de compilador e vinculador
Se você está com problemas de vinculação, também é possível incorporar pkg-config
aqui:
#/bin/sh
g++ $* 'pkg-config --cflags --libs opencv'
Espaços em nomes de arquivos
Enquanto outras postagens sobre problemas semelhantes existem , a manipulação de espaços nos nomes de arquivos é
não trivial, então eu pensei em recapitular uma solução elegante aqui; especificamente eu encontrei
que usar a variável IFS
ajuda tremendamente.
Então, fazer uma pequena adição para acabar com
#/bin/sh
IFS=$';'
g++ $* 'pkg-config --cflags --libs opencv'
resolve problemas com espaços em nomes de arquivos também!
O post sobre a criação de um shell script não foi muito claro. Esse foi o procedimento simples que eu segui para criar um script e funciona mesmo que o nome do arquivo tenha espaços.
Veja o que eu fiz
mkdir ~/bin
nano ~/bin/gcv
sudo chmod u+x ~/bin/gcv
Digite o seguinte no script
#!/bin/bash g++ "$@" 'pkg-config --libs --cflags opencv'
export PATH=$PATH:~/bin
echo $PATH
e verifique se ~/bin
está listado na saída. alais
se vir aliases com o nome gcv
use o comando unalias gcv
ou senão você terá problemas ao usar gcv
como um comando para compilar o código. Pode ser que aliases tenham prioridade mais alta que scripts.