Проблемы с псевдонимами и opencv

У меня есть псевдоним, определенный для компиляции программы opencv, которая выглядит следующим образом

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

Затем я продолжаю вводить

gcv imageshow.cpp

Я получаю этот длинный список ошибок

Но когда я использую ту же команду, указанную в псевдониме с файлом .cpp (исходный код) между файлами Include и Library (следуя предложению здесь), все работает

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

Теперь, набрав длинную команду, которая становится еще больше по мере увеличения сложности, каждый раз становится все труднее, пожалуйста, помогите мне в том, чтобы заставить псевдоним работать или предложить любую другую альтернативу. [ ! d7]

1
задан 23 May 2017 в 15:39

2 ответа

Почему бы не использовать простой скрипт вместо псевдонима?

file gcv в ~/bin/

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

Альтернативно, если вы используете zsh, вы можете использовать функцию, определенную в вашем файле .zshrc: [!d2 ]

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`

также разрешает проблемы с пробелами в именах файлов!

0
ответ дан 25 May 2018 в 08:05
  • 1
    Я даю ему выстрел прямо сейчас. Мне нужна ясность в этом .. Это сценарий оболочки? Я называю его gcv.sh и помещаю его в ~ / bin ?? Я использую оболочку по умолчанию, чтобы ее Bash правильно? – Bhargav 30 July 2012 в 23:17
  • 2
    @Bhargav - Да, это скрипт оболочки. Вы должны сделать его исполняемым с помощью chmod +x gcv (удалите .sh, если вы хотите использовать только gcv!). И да положите его в каталог ~/bin, который ваш .bashrc должен уже добавить в $PATH. – jmetz 30 July 2012 в 23:22
  • 3
    Теперь .. последнее, что ты сказал о $ PATH .. Кажется, я не нашел его в моем файле .bashrc. Что мне делать? – Bhargav 30 July 2012 в 23:36
  • 4
    Вы можете добавить его сами; в конце вашего ~/.bashrc файла добавьте export PATH=$PATH:~/bin - это означает, что любые исполняемые скрипты в папке bin будут доступны для вызова без указания полного пути – jmetz 30 July 2012 в 23:46
  • 5
    Проблема: если у меня есть сценарий в той же папке, что и исходный код, он отлично работает, а не нет. ERROR: bash: ./gcv: Нет такого файла или каталога. – Bhargav 31 July 2012 в 00:34

Сообщение о создании сценария оболочки было не очень понятно. Это была простая процедура, которую я выполнил для создания собственного скрипта, и он работает, даже если в нем есть пробелы.

[d1 ] Вот что я сделал

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, указанный в выводе u получить. Введите alais, если вы видите какие-либо псевдонимы по имени gcv, используйте команду unalias gcv, иначе у вас будет проблема с использованием gcv в качестве команды для компиляции кода. Может быть, псевдонимы имеют более высокий приоритет, чем скрипты. Даже если мои имена файлов имеют пробелы в них, сценарий не будет иметь проблемы.
0
ответ дан 25 May 2018 в 08:05

Другие вопросы по тегам:

Похожие вопросы: