2011-10-07 17 views
8

Ho lavorato a un progetto in cui stavo usando g ++ per compilare il codice C in file che terminano in .c. Il motivo è che mi è stato detto che g ++ ha messaggi di avvertimento migliori.CMake può usare g ++ per compilare i file C?

Sto passando il processo di compilazione per questo progetto per utilizzare CMake. Ho scoperto che inizialmente CMake voleva usare gcc per compilare i file C. Questo non è riuscito a causa di cose come la dichiarazione delle variabili al momento dell'utilizzo. Così ho cercato di utilizzare g ++ per compilare file C utilizzando l'impostazione

set(CMAKE_C_COMPILER_INIT g++) 

nel file CMakeLists.txt. Ma questo si traduce nel messaggio di errore:

#error "The CMAKE_C_COMPILER is set to a C++ compiler" 

ho rinominando i miei file .c a cpp per risolvere questo problema che sembra essere il modo più semplice per me, per far funzionare le cose, e forse il modo migliore pure. Ma mi chiedevo se fosse possibile forzare CMake a usare g ++ per compilare i file C.

+1

"La ragione è che mi hanno detto che g ++ ha messaggi di avviso migliori." - E potresti confermarlo? Direi che è molto discutibile, perché (per quanto ne so) entrambi sono solo driver che invocano lo stesso compilatore con argomenti diversi (lingua, include percorsi, libreria standard collegata, ecc.) A parte ciò, g ++ non è un Compilatore C quindi finisci a scrivere C++ molto scarso. – delnan

+0

Se stai scrivendo C, compila con un compilatore C. C e C++ non sono la stessa cosa. – Kusalananda

+0

Hai detto '_Questo non è riuscito a causa di cose come dichiarare le variabili in uso time_'; sembra che tu stia utilizzando GCC in modalità C89, invece che in modalità C99. Prova ad aggiungere '-std = c99' al compilatore C - in qualche modo. –

risposta

21

Non è necessario sovrascrivere il compilatore per questo scopo. Se si ha realmente bisogno di compilare i file C come C++ allora si dovrebbe insegnare CMake che i file appartengono al linguaggio C++:

set_source_files_properties(filename.c PROPERTIES LANGUAGE CXX) 
+0

sembra che quello che volevo fare non fosse l'idea migliore e dovrei rinominare i file in .cpp. Ma grazie per una risposta corretta è utile sapere come fare ciò che volevo nel caso in cui fosse veramente necessario. –

+0

qualsiasi idea sul perché applicare questo a un singolo file nel mio progetto renderebbe tutti i file del progetto compilati come C++? Ho un sacco di file .C e voglio solo uno dei da compilare come C++. – Scorpio

+1

@Scorpio, in realtà voglio quel sintomo, ma in un modo definito ... Perché CMake non ha modo di compilare tutti i file .c come C++? – kchoi

Problemi correlati