Условно компилировать в Win32 GUI или консольное приложение Linux

Мне было поручено написать приложение, которое условно компилируется в Win32 GUI-приложение под Windows или консольное приложение под Linux.

Мой самый большой камень преткновения на данный момент — это просто выяснить, как настроить этот проект. Обычно я работаю в Visual Studio 2012, и при создании нового проекта C32 Win32 у меня есть выбор между консольным приложением и приложением с графическим интерфейсом. Я чувствую, что это установка некоторых свойств проекта и других вещей, связанных с компилятором, что затруднит компиляцию того же проекта под Linux и заставит его сгенерировать консольное приложение.

Материал условной компиляции, который меня не сильно беспокоит, я просто пытаюсь выяснить, должен ли я собирать этот материал через командную строку в Windows, а не с помощью Visual Studio, и как мне настроить конечное приложение для завершения в качестве графического интерфейса или консольного приложения при этом.

Надеюсь, я четко объяснил себе, думаю, очевидно, что я довольно растерян. Заранее благодарю за любую помощь.

0

Решение

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

Нет смысла пытаться втиснуть кучу графического интерфейса Win32 в проект консольного приложения.

3

Другие решения

Я бы порекомендовал использовать кроссплатформенный инструментарий, такой как wxWidgets или Qt. Таким образом, вы не привязаны к одной конкретной архитектуре платформы. Эти структуры также имеют обширную документацию о том, как правильно настроить проект с различными компиляторами / средами разработки.

0

Это то, что вы можете, по крайней мере на стороне Windows, использовать определения препроцессора для проекта, чтобы определить оба. Обсуждено здесь!

Компиляция C ++ в Windows и Linux: переключатель ifdef

и стилизовать ваши разделы кода как:

#ifdef WIN32   // Windows system specific
#include <windows.h>
#else          // Unix based system specific
#include <sys/time.h>
#endif

Продолжайте таким образом отделять весь свой кроссплатформенный код. Не забудьте добавить WIN32 в свойства вашего проекта в Свойства -> Свойства конфигурации -> C / C ++ -> Препроцессор

0