Разработка C ++ под Linux - с чего мне начать? - PullRequest
31 голосов
/ 08 марта 2009

Я решил оставить свою установку Windows позади и теперь использую Debian в качестве моей операционной системы по умолчанию. Я всегда кодировал в Windows и, в частности, в Visual Studio. В настоящее время я пытаюсь привыкнуть к компиляции своего кода под Linux.

Хотя у меня еще есть много документации для чтения, и я не ожидаю, что вы, ребята, сделаете это слишком легко для меня, было бы неплохо получить некоторые подсказки о том, с чего начать. У меня есть некоторые конкретные вопросы, но не стесняйтесь предлагать / рекомендовать что-либо еще относительно предмета.

  • Каковы рекомендуемые руководства по созданию make-файла, как мне скомпилировать из этого make-файла (я сам называю g ++, я использую 'make'?)
  • Глядя на другие программы для Linux, они почти всегда имеют файл 'configure'. Что именно это делает? Он только проверяет, установлены ли необходимые библиотеки, или это больше, чем просто проверка требований?
  • Как связать библиотеки и как это связано с моими параметрами make-файла или g ++? В Windows я собирал библиотеку, включал некоторые заголовочные файлы, говорил моему компоновщику, какой дополнительный lib-файл связать, и копировал DLL-файл. Как именно этот процесс работает в Linux?
  • Рекомендации для редакторов кода? В настоящее время я использую nano, и я слышал о vim и emacs, но не знаю, каковы их преимущества перед другими. Есть ли другие, и почему я должен рассмотреть их по сравнению с любым из предыдущих трех? Примечание: я не ищу IDE.

Любая помощь, ссылки на руководства и документацию (желательно те, которые предназначены для начинающих) очень ценятся!

Ответы [ 12 ]

22 голосов
/ 08 марта 2009

Каковы рекомендуемые руководства по созданию файла make, как мне скомпилировать из этого файла сборки (я сам называю g ++, я использую 'make'?)

Вы строите из make-файла, вызывая "make". А внутри вашего make-файла вы компилируете и ссылаетесь, используя g ++ и ld.

Глядя на другие программы для Linux, они почти всегда имеют файл 'configure'. Что именно это делает? Он только проверяет, установлены ли необходимые библиотеки, или это больше, чем просто проверка требований?

Это скрипт, обычно используемый для настройки различных вещей в зависимости от среды, используемой для сборки. Иногда это просто базовый сценарий оболочки, иногда он вызывает такие инструменты, как Autoconf, чтобы узнать, что доступно при сборке. Сценарий «configure» обычно также позволяет пользователю указать различные необязательные элементы, которые необходимо создать или исключить, например, поддержку экспериментальных функций.

Как связать библиотеки и как это связано с моими параметрами make-файла или g ++? В Windows я собирал библиотеку, включал некоторые заголовочные файлы, говорил моему компоновщику, какой дополнительный lib-файл связать, и копировал DLL-файл. Как именно этот процесс работает в Linux?

ld - компоновщик GNU. Вы можете вызывать его отдельно (что в конечном итоге будет делать большинство make-файлов), или у вас может быть делегат g ++. Параметры, передаваемые в g ++ и ld, определяют, где искать включенные заголовки, библиотеки для ссылки и как вывести результат.

Рекомендации для редакторов кода? В настоящее время я использую nano, и я слышал о vim и emacs, но не знаю, каковы их преимущества перед другими. Есть ли другие, и почему я должен рассмотреть их по сравнению с любым из предыдущих трех? Примечание: я не ищу IDE.

Vim и Emacs - очень гибкие редакторы, которые поддерживают множество различных применений. Используйте все, что вам больше нравится, хотя я бы посоветовал вам захотеть несколько минимальных вещей, таких как подсветка синтаксиса.

13 голосов
/ 08 марта 2009

Просто примечание к ответам MandyK.

Создание make-файлов вручную - это, как правило, очень непереносимый способ сборки среди вариантов дистрибутива linux / unix. Существует множество систем сборки для автоматической генерации make-файлов, сборка без make-файлов. GNU Autotools , Cmake , Scons , джем и т. Д.

Также более подробно о настройке.

  • Проверяет доступные компиляторы, библиотеки, архитектуру системы.
  • Убедитесь, что ваша система соответствует списку соответствующих совместимых пакетов.
  • Позволяет указать аргументы командной строки для специализации сборки, пути установки, пакетов опций и т. Д.
  • Configure затем генерирует соответствующий Makefile, специфичный для вашей системы.
7 голосов
/ 08 марта 2009

Каковы рекомендуемые руководства по создание файла make, как мне скомпилировать из этого файла Makefile (я называю G ++ я сам использую «make»?)

Я научился писать make-файлы, прочитав GNU Make manual .

Глядя на другие программы Linux, они почти всегда, кажется, есть файл 'configure'. Что именно это делает делать? Это только проверяет, если требуется библиотеки установлены или делает это больше, чем просто проверка требований?

Файл конфигурации обычно связан с autotools . Как следует из названия сценария, он позволяет настраивать программное обеспечение. С точки зрения разработчика это в основном означает установку макросов, которые определяют переменные, какие библиотеки доступны и тому подобное. Он также проверяет наличие библиотек. В конце сценарий создает GNU Makefile, который затем можно использовать для фактической сборки и установки программного обеспечения.

Система сборки GNU - только одна из многих. Мне не особенно нравится система сборки GNU, так как она работает медленнее, чем другие, и генерирует уродливый Makefile. Некоторые из наиболее популярных - CMake , Jam ( Boost Jam может представлять интерес для C ++) и waf . Некоторые системы сборки просто генерируют файлы Makefile, в то время как другие предоставляют совершенно новую систему сборки. Для простых проектов написание Makefile вручную было бы легко, но «проверка зависимостей» (для библиотек и т. Д.) Также должна выполняться вручную.

Редактировать: Брайан Джанфоркаро также указал на это.

4 голосов
/ 08 марта 2009

Ваш вопрос слишком общий, но вот что я бы порекомендовал:

  • Редактор: vim и emacs популярны. Главное, как и с большинством инструментов, - это освоить один. Мне нравится использовать vim, потому что vi (его потомок) доступен везде, но это может быть не очень актуально, особенно если вы остаетесь в Linux. Подойдет любой редактор программ.

  • настройка: если вы не делаете большие проекты, не беспокойтесь об этом. Это кошмар для использования и отладки. Это имеет смысл, только если вы собираетесь распространять свой проект - в этом случае прочитайте книгу: http://sources.redhat.com/autobook/. Как уже говорилось, существуют альтернативы (cmake, scons и т. Д.). Я хорошо знаком с scons и autotools, но я все еще использую make для небольших (несколько файлов) проектов.

Что касается разделяемой библиотеки: она почти как windows, за исключением того, что вы напрямую ссылаетесь на разделяемую библиотеку - в Linux нет различия между .lib и .dll. Например. для одной библиотеки foo с функцией foo:

int foo(void)
{
     return 1;
}

Вы бы построили его следующим образом:

gcc -fPIC -c foo.c -o foo.o
gcc -shared foo.o -o libfoo.so

Основное (конечно, в реальной жизни вы помещаете API в заголовочный файл):

int foo(void);

int main(void)
{
    foo();
    return 0;
}

А затем вы связываете это как:

gcc -c main.c -o main.o
gcc main.o -o main -L. -lfoo 

-L. здесь можно сказать, что вы хотите, чтобы компоновщик просматривал текущий каталог (в отличие от windows, в Linux это никогда не делается по умолчанию), -lfoo говорит, что он ссылается на библиотеку foo.

4 голосов
/ 08 марта 2009

Итак, для начала, я сначала укажу вам на это руководство для make-файлов, оно также охватывает некоторые связующие элементы. Это всего лишь кое-что из того, что дал мне мой университетский специалист по компьютерным наукам, я нашел это очень ясным и лаконичным, очень полезным.

А что касается IDE, я использую eclipse обычно потому, что он также обрабатывает make-файл. Не говоря уже о том, что компиляция и стандартный вывод находятся у вас под рукой в ​​программе.
Он был в основном предназначен для разработки на Java, но также есть плагин для C / C ++!

3 голосов
/ 08 марта 2009
  • Рекомендации для редакторов кода? В настоящее время я использую nano, и я слышал о vim и emacs, но не знаю, каковы их преимущества перед другими. Есть ли другие, и почему я должен рассмотреть их по сравнению с любым из предыдущих трех? Примечание: я не ищу IDE.

Если вы используете Linux с оконным менеджером (KDE, Gnome и т. Д.), Вы также можете рассмотреть возможность использования стандартного текстового редактора для вашего оконного менеджера. Основное преимущество, которое он имел бы по сравнению с vim / emacs / nano, заключается в том, что он кажется более знакомым для пользователя из среды Windows: редактор, написанный для запуска в диспетчере окон, имеет строку меню, диалоги открытия / сохранения файлов, отмену / повтор и множество других полезных функций, с которыми консольные редакторы, вероятно, не могут сравниться. (Хотя emacs и vim довольно сложны в наши дни, так что кто знает ;-P)

На KDE (это то, что я использую), я могу порекомендовать KWrite, который представляет собой функциональный, но довольно простой текстовый редактор с подсветкой синтаксиса; или Kate, который является более красивым текстовым редактором с некоторыми дополнительными функциями: управление сеансом, встроенная панель терминалов, автоматический вызов make и несколько плагинов, включая средство просмотра символов C / C ++. Я обычно использую Kate для своей работы на C ++, когда не хочу беспокоиться о настройке полноценного проекта IDE. (К вашему сведению, IDE для KDE - KDevelop)

3 голосов
/ 08 марта 2009

Рекомендую книгу Искусство программирования Unix от ESR. Он охватывает выбор редактора, языка программирования и т. Д. Он также дает хорошее представление о мышлении, стоящем за программированием в Unix или Linux.

Для редакторов вам, вероятно, понадобится Vim или Emacs. Они оба разные, и какой из них лучше, больше о личном вкусе, чем что-либо еще. Я использую Vim. Он отлично подходит для быстрого перемещения по коду и внесения изменений. Мне не очень нравился Emacs, но многим это нравится. Emacs чрезвычайно расширяем и может использоваться для всего, от читателя новостей до ide. Попробуйте оба и посмотрите, что вам нравится.

3 голосов
/ 08 марта 2009

Рекомендации для редакторов кода? я в настоящее время использую нано, и я слышал о VIM и Emacs, но не знаю, что Преимущества их по сравнению друг с другом. Есть ли другие, и зачем мне рассмотреть их по любому из предыдущих три? Примечание: я не ищу IDE.

Vi и Emacs - два наиболее важных редактора Unix; если вы настроены на использование текстового редактора, а не IDE, то одним из них или их производных (vim, xemacs и т. д.) будет путь. Оба поддерживают подсветку синтаксиса и всевозможные функции, по умолчанию или с помощью расширений. Лучшая часть об этих редакторах - расширяемость, которую они предлагают; emacs через различные lisp и vim через свой собственный язык сценариев.

Я лично использую Emacs, поэтому я не могу много говорить о Vim, но вы сможете найти много информации об обоих в Интернете. Emacs имеет несколько хороших учебников и справочных материалов, включая этот .

EDIT [декабрь 2014]: в последнее время наблюдается тенденция кроссплатформенности и расширяемости редакторов. Это может быть хорошим выбором, если вы хотите что-то меньшее, чем IDE, но более графическое, чем vi / emacs и нативное восприятие на разных платформах. Я рекомендую посмотреть на Sublime или Atom ; оба они работают в Windows / Linux / Mac и имеют большие сообщества плагинов и тем.

2 голосов
/ 08 марта 2009

Для кого-то из Visual Studio все эти вещи из командной строки могут показаться загадочными и грязными. Прежде чем превратиться в наркомана bash shell / vim / emacs, попробуйте сначала несколько инструментов на основе графического интерфейса, чтобы у вас было время перехода ...

  • QT 4.5 с мини-IDE QT Creator. Это лучшие рамки, на несколько лет впереди конкурентов.
  • Eclipse (C ++) - из моего опыта работы с Windows я нахожу его поразительным (возможно, это лучшее из когда-либо написанных Java-приложений)
  • KDevelop
  • Anjuta
  • Если вы используете Delphi, Lazarus / FreePascal является хорошей альтернативой.

Я уверен, что длинношерстные издеваются и утверждают, что vim или emacs предоставляют им лучшую и самую быструю среду разработки, но разные удары для разных людей. Кому-то, привыкшему к IDE, потребуется некоторое время для переключения, или он может вообще не захотеть переключаться. Несмотря на все свои навыки редактирования, создание приложений с графическим интерфейсом, безусловно, не работа для инструментов 80x25. Требуются годы, чтобы стать экспертом со стороны командной строки, это скорее трансформация мировоззрения, чем что-либо еще.

2 голосов
/ 08 марта 2009

промежуток между непосредственным вызовом g ++ и использованием цепочки сборки autotools довольно узок. Хорошо разбирайтесь в autotools, который действительно ближе всего к «проекту», доступному в мире Linux / Open Source.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...