Linux Mint основан на Ubuntu, можно установить пакеты из репозиториев Ubuntu. Вам, вероятно, придется изменить Ваш /etc/apt/sources.list
если Вы не можете найти пакет в менеджере по программному обеспечению.
IcedTea находится в репозитории Вселенной, который должен быть включен по умолчанию. Можно также найти соответствующие пакеты путем поиска Ubuntu repos.
make
инструмент, в котором Вы нуждаетесь. Просто необходимо ввести make
с Makefile
на месте и Ваш файл будет сборкой.
Вот простой Make-файл, который генерировал бы файл newFileName
согласно строке Вы отправили в вопросе:
MYFLAGS=$(shell pkg-config --cflags --libs opencv)
newFileName: file.cpp
$(CXX) $< -o $@ $(MYFLAGS)
При размещении этого в каталог кода просто введите make
и Ваш код будет сборкой.
Краткое объяснение:
make
будет искать Make-файл в каталоге;make
выполнит первое правило: newFileName, и выполняют его;newFileName:
определяет имя правила или цель, предпочтительно название файла, что правило будет roduce;:
предпосылки, другими словами, файлы, которые будут необходимы для выполнения рецепта этого правила или правил, которые должны быть выполнены прежде;newFileName
.$(CXX)
расширится до Вашего компилятора C++ по умолчанию и MYFLAGS
расширится до вывода pkg-config --cflags --libs opencv
.Премия: Составьте завещание, выполняют рецепт правила, только если предпосылки были изменены после метки времени создания цели, поэтому если Вы вводите make
и у Вас уже есть актуальный newFileName файл, Вы, привычка потеряла время, перекомпилировав что-то, что Вы уже имеете. Это специально хорошо, когда у Вас есть много файлов.
Раньше Вы учитесь использовать make
лучше. Создайте a makefile
в том же каталоге как file.cpp
- остерегайтесь делают, требует, чтобы использование фактической вкладки сделало отступ. При использовании пробелов Вы получите "недостающий разделитель" ошибка:
OPENCV=`pkg-config --cflags --libs opencv`
newFileName: file.cpp
$(CXX) -o newFileName file.cpp $(OPENCV)
Для создания просто работайте make
в том каталоге. Это проверит правило на первую цель в make-файле. В этом случае существует только один, newFileName
цель. С тех пор file.cpp
предпосылка, если файл с целевым именем не существует, или это существует, но время изменения предпосылки является более новым (т.е. Вы изменили file.cpp
с тех пор newFileName
был в последний раз создан), рецепт будет выполняться.
Удостоверяться $(CXX)
определяется в Вашей системе, выполняется make -p | grep CXX
в каталоге без make-файла. Вывод должен включать CXX = g++
.
Если Вы добавляете другую цель, например:
otherFile: file2.cpp
$(CXX) -o otherFile file2.cpp $(OPENCV)
Можно выполнить это правило при помощи целевого имени, make otherFile
. Снова, если никакая цель не дана, первый в make-файле используется.
Так как те две цели следуют за идентичным шаблоном при использовании исполняемых имен, которые соответствовали именам исходного файла, Вы могли сделать это:
%: %.cpp
$(CXX) -o $* $*.cpp $(OPENCV)
Теперь, make whatever
будет работать
g++ -o whatever whatever.cpp `pkg-config --cflags --libs opencv`
Посмотрите, Как Соответствие Шаблонов и Автоматические переменные для объяснения того, как это работает.
Сделайте становится особенно полезным, поскольку Вы начинаете делать более сложные вещи - компилирующий объект (.o
) файлы и объединение их в исполняемые файлы, и т.д. В конечном счете, необходимо будет учиться использовать некоторую систему сборки, и make
наиболее распространенный в *, отклоняют мир.
make SURF_detector surfPoints.cpp
это дает сообщение: make: *** No rule to make target
SURF_detector'. Остановитесь'. Мой make-файл: %: %.cpp $(CXX) -o $* $*.cpp $(OPENCV)
– Colin747
27.01.2014, 16:24
make surfPoints
скомпилировал бы surfPoints.cpp
в исполняемый файл surfPoints
. Вы не можете заполнить prereq на командной строке - каждый аргумент будет взят в качестве цели - поэтому, если будет нет SURF_detector.cpp
та команда приведет тот путь к сбою. Если Вы хотите использование произвольные исполняемые имена, которые не соответствуют имени исходного файла, необходимо будет использовать определенное пользовательское правило согласно первому примеру.
– goldilocks
27.01.2014, 16:36
make surfPoints
, это производит длинный список ошибок, но я могу скомпилировать файл сам, если я вручную ввожу команду. Я обновлю свой вопрос, таким образом, это будет читаемо.
– Colin747
27.01.2014, 16:40
OPENCV='pkg-config foobar --cflags --libs'
(где '
на самом деле обратная галочка), работы для меня с другим материалом pkg-конфигурации, но Вы могли попробовать RSFalcon7, предложил OPENCV=$(shell pkg-config --cflags --libs opencv)
.
– goldilocks
27.01.2014, 16:54
У Вас есть 3 опции для сокращения вещей в типичной оболочке, таких как Bash.
Я покажу Вам 2 и 3.
Вы могли сделать что-то вроде этого как псевдоним.
$ alias mygcc='g++ file.cpp -o newFileName $(pkg-config --cflags --libs opencv)'
Самое большое ограничение с псевдонимом - то, что Вы не можете действительно передать его список аргументов. Думайте о псевдониме как о макросе, который взорвется в более длинную строку, но та строка эффективно починена, Вы не можете заменить значениями в на различные пятна в строке.
Можно обмануть его немного путем стратегического расположения имени файла или других аргументов так, чтобы они произошли в конце псевдонима.
$ alias myalias='ls -l'
$ myalias -d
drwxrwxr-x. 2 saml saml 4096 Jan 24 11:19 .
$ myalias file1
-rw-rw-r--. 1 saml saml 0 Jan 24 11:19 file1
Таким образом, когда мы работаем myalias
мы можем дать ему имена файлов или другие переключатели, и это работает.
Функции могут сделать намного больше. Можно вставить вещи здесь как проверка ошибок или выполнить некоторую другую команду и сохранить ее результаты в переменной. Так делая это функция позволила бы Вам, управляют аргументами в строке.
$ mygcc () { g++ file.cpp -o newFileName $(pkg-config --cflags --libs opencv); }
Если бы Вам нужны больше, чем просто простая острота затем, я убедил бы Вас изучить использование надлежащего инструмента те, которые Делают, CMake или любое из несметного числа инструментов разработки зависимости.
Выбор инструмента сборки должен быть обсуждением, которое Вы и Ваша команда имеете, хотя, не просто уйдите и выберите что-то. Выбор должен быть сделан так, чтобы соответствующий инструмент для Вашей команды и технологий, которые Вы используете для создавания приложения.