2011-10-07 16 views
8

Pracowałem nad projektem, w którym używałem g ++ do kompilowania kodu C w plikach kończących się na .c. Powodem jest to, że powiedziano mi, że g ++ ma lepsze komunikaty ostrzegawcze.Czy CMake używa g ++ do kompilowania plików C?

Przełączam proces kompilacji dla tego projektu, aby używać CMake. Odkryłem, że początkowo CMake chciał użyć gcc do kompilowania plików C. Nie udało się z powodu takich rzeczy jak deklarowanie zmiennych w czasie użycia. Więc starałem się używać g ++ skompilować pliki C stosując zachodzące

set(CMAKE_C_COMPILER_INIT g++) 

w pliku CMakeLists.txt. Ale to skutkuje komunikatem o błędzie:

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

I zostały zmiany nazwy moich plików .c do .cpp, aby rozwiązać ten problem, jako że wydaje się być najprostszym sposobem dla mnie, aby to wszystko działa, a może najlepszym sposobem także. Ale zastanawiałem się, czy można zmusić CMake do używania g ++ do kompilowania plików C.

+1

- Czy możesz to potwierdzić? Powiedziałbym, że jest to bardzo wątpliwe, ponieważ (o ile mi wiadomo) oba są po prostu sterownikami wywołującymi ten sam kompilator z różnymi argumentami (język, włącza ścieżki, dołączoną standardową bibliotekę itp.). Poza tym g ++ nie jest Kompilator C, więc kończysz pisanie bardzo złego C++. – delnan

+0

Jeśli piszesz C, kompilujesz z kompilatorem C. C i C++ to nie to samo. – Kusalananda

+0

Powiedziałaś: "To się nie powiodło z powodu takich rzeczy jak deklarowanie zmiennych w czasie użycia"; to brzmi jak używasz GCC w trybie C89, zamiast trybu C99. Spróbuj dodać '-std = c99' do kompilatora C - jakoś. –

Odpowiedz

21

Nie należy przesłonić kompilatora w tym celu. Jeśli naprawdę potrzebujesz do kompilacji plików C, jak C++, to powinieneś uczyć cmake że pliki należą do języka C++: „Powodem jest to, że jak mi powiedziano, że g ++ ma lepsze komunikaty ostrzegawcze”

set_source_files_properties(filename.c PROPERTIES LANGUAGE CXX) 
+0

brzmi jak to, co chciałem zrobić, to nie jest najlepszy pomysł i powinienem zmienić nazwy plików na .cpp. Ale dzięki za poprawną odpowiedź warto wiedzieć, jak robić to, co chciałem, jeśli jest to naprawdę konieczne. –

+0

jakikolwiek pomysł, dlaczego zastosowanie tego do pojedynczego pliku w moim projekcie spowodowałoby skompilowanie wszystkich plików w projekcie jako C++? Mam kilka plików .c i chcę, aby tylko jeden z nich był skompilowany jako C++. – Scorpio

+1

@Scorpio, właściwie chcę tego symptomu, ale w określony sposób ... Dlaczego CMake nie ma sposobu na skompilowanie wszystkich plików .c jako C++? – kchoi

Powiązane problemy