2012-05-14 2 views
3

Я новичок в C++ с фона C# .NET и Visual Studio (и некоторых Objective-C/XCode).Как написать код на C++, который работает между IDE?

Я хочу написать кросс-платформенное (Windows, OS X, Linux) приложение с C++. Я начал с TextMate на своем Mac и Notepad на своей Windows и скомпилировал код с помощью g ++ в командной строке/терминале для создания исполняемых файлов на своей платформе.

я запуталась, когда я начал использовать IDE (а именно VC++, XCode и Затмение). Я пробовал все три проекта и создал проекты, прежде чем вставлять в него свой код. Если я начну редактирование в одной среде IDE, я не знаю, как получить возможный фрагмент кода для компиляции на другой платформе.

Например, если у меня есть файл класса - foo.cpp. В Eclipse он будет генерировать foo.cpp (внутри него foo.h, foo::foo()) и отдельный файл заголовка foo.h (внутри него файл FOO_H_ и т. Д.). В Xcode он генерирует папку Foo, которая содержит main.cpp и foo.l) - все. Почему разница?

Я, хотя код C++ - это просто код на C++, который создает исполняемые файлы для конкретной платформы, если они скомпилированы на этой платформе. (например, компилировать на Mac, он становится исполняемым файлом Mac, а если скомпилирован в Windows, он становится исполняемым файлом Windows).

Кажется, как только я начал использовать IDE, мой C++-код автоматически становится неспортивным из-за всех этих автоматически сгенерированных файлов, о которых я не понимаю. Я пытаюсь одновременно читать документацию на XCode, Eclipse и Visual Studio, и это еще более смущает меня. Я просто хочу, чтобы написать C++ ...

Я также следующий классический текст Страуструп, чтобы забрать C++ и в книге, ничего подобного заголовка или источника .h или _H_ файлы не были упомянуты, как и того, почему все эти файлы были сгенерированы.

Помимо использования компилятора Notepad/Textmate + G ++, как я могу написать чистую, портативную программу на C++ в среде IDE, которая может быть кросс-платформенной, или это даже возможно?

+2

Вам нужны файлы заголовков для совместного использования определений классов между единицами компиляции и интерфейсами библиотек для других пользователей. Если вы делаете все в одном файле, вам это не нужно. Другие шаблоны проектов, вероятно, просто полезны для этой платформы, например. VC создает stdafx.h для использования в качестве предварительно скомпилированного заголовка для ускорения, включая все заголовки API Windows при сборке и т. Д. Если вы беспокоитесь, выбросьте созданные шаблоном файлы и просто начните с пустого файла. – Rup

+1

И 'FOO_H_' и т. Д. Является [include guard] (http://en.wikipedia.org/wiki/Include_guard) - это механизм, чтобы избежать повторного разбора файла заголовка дважды, если вы дважды включаете его в ту же компиляцию единица через разные маршруты и т. д. – Rup

ответ

2

по умолчанию (= наиболее часто используется) структура файла для класса C++ под названием Foo состоит из заголовка файла под названием foo.h, который будет содержать определение класса Foo и foo.cpp, который содержит определение методов Foo.

Часто все файлы заголовков помещаются в отдельную папку под названием include.

Так общий подход, чтобы иметь ту же структуру файлов/папок, которые могут быть использованы для более чем одного IDE является:

  • создать структуру папок вручную (например, include, src и make папки внутри вашего проекта папка MyProject, файлы проекта для IDE перейдут в make, .h файлы в include и .cpp файлы в src)
  • создайте файлы .h и .cpp для своих классов вручную с помощью explorer/finder/...
  • использовать «добавить существующий файл» или что-то подобное, чтобы добавить эти файлы в файл проекта вашей среды IDE.
  • , как Руп отметил, для Visual Studio, следует использовать «пустой проект» предустановленного, или он будет добавить некоторые файлы заголовков вы не хотите
+0

+1. Просто замечание: большинство IDE (например, Eclipse, MSVC) позволяют создавать файлы .cpp и .h (и указывать для них папку), поэтому нет необходимости использовать проводник для создания исходных файлов. Кроме того, Eclipse по умолчанию синхронизирует папки проекта с структурой файловой системы, поэтому создание каталога может быть выполнено с использованием среды IDE (просто создайте подпапку в вашем проекте) – user396672

1

Использование CMake или других мета-buildsystem Использовать подталкивание и Qt чтобы абстрагировать как можно больше платформы.

CMake позволяет создавать файлы проекта для большинства IDE: s, которые имеют значение при переключении между платформами и IDE: вы просто указываете CMake генерировать новые файлы проектов для этой среды IDE, которую вы используете на этой платформе.

Самый простой способ получить платформенный код на windows, linux и mac - использовать QtCreator в качестве IDE, в нем также есть много хороших учебников. http://qt.nokia.com/downloads

+1

Я, ОП, уже смущен, и теперь «CMake», «Use Boost» "и" Qt "... huarrrrr – KMC

+0

Boost и Qt являются библиотеками, которые, если вы их используете, скроют большую часть деталей, которые зависят от платформы. это означает, что во избежание необходимости писать #ifdef _WIN32 .... в вашем коде –

+0

извините за то, что вы наводнили много нового, вы изучаете C++, и я должен был это заметить. Обновленный ответ с помощью и ссылки на IDE, который позволит вам писать код в идеальном стиле, и такая же IDE существует для всех платформ, поэтому вам нужно будет только изучить ОДИН. –

1

Почему бы не использовать 1 IDE для всех? Eclipse - это кросс-платформа IDE

+1

Правильно, вам нужно только поддерживать несколько IDE, если вы хотите, чтобы широкий круг людей собирал ваш проект самостоятельно. Если вы собираетесь скомпилировать его самостоятельно, вы можете просто использовать несколько компиляторов в одной среде IDE. –

Смежные вопросы