Подтвердить что ты не робот

Разработка С++ на Linux - с чего начать?

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

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

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

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

4b9b3361

Ответ 1

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

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

Глядя на другое программное обеспечение Linux, у них почти всегда есть файл конфигурации. Что именно он делает? Проверяет ли только, установлены ли требуемые библиотеки или не просто проверяет требования?

Это a script обычно используется для настройки различных вещей, основанных на среде, которая используется для построения. Иногда это просто базовая оболочка script, в других случаях она вызывает такие инструменты, как Autoconf, чтобы узнать, что доступно при создании. "Конфигурация" script обычно также является местом, где пользователь может указать различные необязательные объекты, которые нужно построить или исключить, например поддержку экспериментальных функций.

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

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

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

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

Ответ 2

Просто обратите внимание на ответы MandyK.

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

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

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

Ответ 3

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

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

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

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

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

Edit: Брайан Джанфорчаро также указал на это.

Ответ 4

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

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

Ответ 5

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

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

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

В отношении общей библиотеки: это почти как окна, за исключением того, что вы напрямую связываетесь с разделяемой библиотекой - в Linux нет различия .lib vs..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. здесь, чтобы сказать, что вы хотите, чтобы компоновщик выглядел в текущем каталоге (вопреки окнам, это никогда не выполняется по умолчанию в Linux), -lfoo говорит, чтобы ссылаться на библиотеку foo.

Ответ 6

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

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

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

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

Ответ 7

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

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

Ответ 8

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

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

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

Ответ 9

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

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

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

Ответ 10

пространство между вызовом g++ напрямую и с использованием цепочки сборки autotools довольно узкое. Получите удовольствие от autotools, что действительно самое близкое к "проекту", доступному в мире Linux/Open Source.

Ответ 11

В качестве дополнительной заметки среди правильных ответов здесь. В случае, если вы хотите попасть на землю, работая как парень Windows, я бы предложил новый новый Qt SDK. Он будет чувствовать себя как дома: -)

Ответ 12

Я советую использовать SCons вместо Make, он выполняет ту же работу, но ее проще использовать и обрабатывать из коробки, как создавать динамические библиотеки, зависимости и т.д. Вот пример реальной жизни для простой проги

env = Environment()
env.Append(CCFLAGS='-Wall')
env.Append(CPPPATH = ['./include/'])

env.MergeFlags('-ljpeg')
env.ParseConfig("sdl-config --cflags --libs")
env.ParseConfig("curl-config --cflags --libs")
env.ParseConfig("pkg-config cairo --cflags --libs")

env.Program('rovio-pilot', Glob('./src/*.cpp'))

Как текстовый редактор, я доволен JEdit для кодирования, но это вопрос вкуса.