Ho un'applicazione molto grande creata utilizzando Visual Studio 2008 che è progettato per funzionare su Windows XP. Il codice è costituito da un file di soluzione che contiene sei progetti separati. Il mio compito è quello di portare questa applicazione per l'esecuzione su Linux. Non ho mai fatto nulla di simile prima.Definite a livello di soluzione in Visual Studio?
Ho scoperto ieri che la mia azienda desidera che questo codice sia ancora compilato su Windows una volta che ho finito. La mia prima idea per realizzare questo è di usare una dichiarazione preprocessore come ad esempio:
#define COMPILE_FOR_LINUX
Poi, ho potuto dire al compilatore i file da includere nelle intestazioni utilizzando blocchi del preprocessore come questi:
#ifdef COMPILE_FOR_LINUX
// include required Linux headers here and skip Windows header includes
#else
// include required Windows headers here and skip Linux header includes
#endif
Dopo compresi i file appropriati, ho potuto incapsulare tutto il codice dipendente piattaforma con blocchi come questi:
#ifdef COMPILE_FOR_LINUX
// compile Linux specific code used here.
#else
// compile Windows specific code used here.
#endif
al fine di rendere il più semplice possibile per qualcuno di c Compilare l'applicazione per la loro piattaforma preferita, mi piacerebbe avere COMPILE_FOR_LINUX specificato in un solo posto. Tuttavia, non sono sicuro di come farlo.
Un'idea che avevo era di creare un file di intestazione vuoto e quindi avere ogni singolo file nella soluzione include questo file di intestazione come specificato nel percorso di inclusione del file di soluzione di Visual Studio. Per Linux, avrei un'altra versione del file di intestazione che definisce COMPILE_FOR_LINUX, quindi il makefile punta a questa versione anziché a quella vuota. Tuttavia, sono sicuro che questa è una soluzione molto approssimativa, e non sono sicuro che funzionerà.
Qualcuno potrebbe suggerire un metodo più elegante per definire qualcosa globalmente o creare una variabile in modo tale che ogni file nella soluzione possa vederlo?
Nel caso in cui altre persone lo stiano cercando: http://stackoverflow.com/questions/5268177/è-questo-questo-per-definire-constant-on-a-solution-basis –