2014-12-30 5 views
5

Nel mio codice utilizzo un file di intestazione che sfortunatamente ha una posizione diversa in diverse distribuzioni Linux.Come gestire una diversa posizione del file di intestazione su diverse distribuzioni Linux?

Nel mio caso si è fitsio.h da cfitsio che si trova qui in openSUSE 12.1:

#include <cfitsio/fitsio.h> 

e qui in Arch Linux:

#include <fitsio.h> 

Credo di poter usare alcuni direttive del preprocessore per creare un interruttore. Posso usare questo per testare se sono su Linux o Windows, ecc., Ma non ho idea di cosa posso usare per verificare se sono su Arch Linux o no.

Oppure c'è un altro modo/strategia per gestire questo caso?

+0

Non ho mai lavorato su grandi progetti, ma quando faccio progetti con Linux + Mac/Windows, finisco sempre con le direttive del preprocessore. – keyser

risposta

7

Mantenere il più semplice includono

#include <fitsio.h> 

Poi, sotto supplementari includono le directory, i percorsi Lista di directory che contengono questa intestazione sia per SUSE e per Arch:

/path/to/header/cfitsio 
/path/to/header 

Anche se il primo è inesistente su Arch, non porterà a nessun problema durante la compilazione.

+3

Il problema principale con questo metodo è che ** ** porterà a problemi su build più grandi. In particolare, porterà a una lenta compilazione quando le ricerche di file falliscono. Questo tuttavia può spesso essere risolto impostando condizionatamente tali percorsi nel makefile. L'idea qui è che risolvi il problema una volta per makefile, in un singolo posto, invece che in ogni file sorgente. – MSalters

1

Alcune librerie sono dotate di un programma [libraryname]-config che restituisce i flag del compilatore corretti da utilizzare durante la compilazione rispetto a quella libreria sulla piattaforma corrente.

Ad esempio, libncurses 'ncursesw5-config --cflags --libs produce questo su Arch:

-L/usr/lib -lncursesw 

e questo su Debian:

-I/usr/include/ncursesw 
-lncursesw -ltinfo 

vista #include <curses.h> nel codice C è quindi sufficiente, e si compila correttamente in entrambe distribuzioni.