Piszemy aplikację głównie w C
, ale niektóre podmoduły są napisane w C++
(w systemie Linux). Problem polega na tym, jak napisać pliki CMakeLists.txt
, aby użyć g++
dla niektórych podkatalogów i gcc
dla innego.Mieszanie C i C++ z CMAKE
Odpowiedz
Kompilator i linker jest zwykle określany przez rozszerzenie pliku, jeśli nie jest ustawione inaczej. Dopóki końcówki plików są w porządku, twój kod jest kompilowany i połączony z właściwym kompilatorem.
Na marginesie pamiętaj, aby wprowadzić poprawne deklaracje C, jeśli mieszkasz C i C++.
Różnica między g ++ i gcc jest zasadniczo taka, że g ++ przekazuje -lstdC++ do linkera. Po prostu dodaj bibliotekę standardową C++ jako jawną zależność modułów C++.
Aby było jasne, gcc może kompilować kod w C++. gcc i g ++ są pod tym względem takie same. Różnica polega tylko na tym, że używając g ++ nie musisz jawnie mówić kompilatorowi, żeby łączył się z libstdC++.
Dziękuję, poprawiłem pytanie. Ta część jest OK, ale chciałbym wiedzieć, jak określić gcc/g ++ dla konkretnych podkatalogów. – Cartesius00
Jaka jest potrzeba używania g ++ w niektórych podkatalogach, jeśli możesz po prostu użyć gcc i jawnie polegać na libstdC++, kiedy to konieczne? – bames53
Musimy wymieszać niektóre istniejące kody C i C++. – Cartesius00
Możesz ustawić właściwość LANGUAGE plików źródłowych na "CXX". Zobacz documentation.
CMake robi to automatycznie. Można swobodnie wymieszać oba rodzaje plików w pliku CMakeLists.txt:
. . .
add_executable(
my_program
code.cpp
more_code.c
)
Robię to cały czas i po prostu działa.
Pamiętaj, że potrzebujesz osłon głowicy C. Więc w code.cpp powiesz "extern" C "{#include" more_code.h "}' – Unapiedra
"jeśli nie jest ustawione inaczej", tj. Na górze 'CMakeLists.txt', użyj' projektu (myproject) 'zamiast powiedzieć 'projekt (myproject C)'. – congusbongus