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
- 1. Mieszanie C++ i Objective C
- 2. Mieszanie plików C i Assembly
- 3. Problemy z CMake i Visual C++ 2010
- 4. Mieszanie kodu VB.net z C# kod
- 5. Mieszanie bibliotek z różnych kompilatorów C++
- 6. Konfigurowanie projektu C++ OpenCV z Cmake
- 7. Mieszanie OCaml i C: czy to jest warte bólu?
- 8. C# Threading - Czytanie i mieszanie wielu plików jednocześnie, najłatwiejszą metodą?
- 9. Mieszanie projektów C# i VB.NET = zepsute "Przejdź do definicji"
- 10. CMake disable -std = C++ 11 flag dla plików C
- 11. LTO z LLVM i CMake
- 12. Używanie cmake w oknach dla C++
- 13. cmake vs waf dla projektu C++
- 14. dodaj obsługę C++ 0x w cmake
- 15. Mieszanie C przyrost/spadek pre/post z operatorem kropki Cel-C działa?
- 16. Profilowanie za pomocą CMake, C++ i Visual Studio 2012
- 17. Kompilacja OpenCV z CMake i minGW
- 18. Jak włączyć C++ 17 w CMake
- 19. clang, openMP i CMake
- 20. Mieszanie plików i pętli
- 21. Jak mogę utworzyć mieszanie Perla w kodzie C?
- 22. Skutecznie za pomocą SublimeText z SublimeClang dla projektów CMake/C++
- 23. Mieszanie zewnętrzne i const
- 24. Release SAFEARRAY z C++ DLL i C#
- 25. Łączenie C++ i C#
- 26. CMake i MsVS-NuGet
- 27. Kompilacja błąd w C++ projektu z C i C++ kodów
- 28. Mieszanie build.sbt z projektu/Build.scala i agreguje
- 29. Wymuś użycie CMake do użycia kompilatora C++ dla plików C z Visual Studio
- 30. Mieszanie metod rozszerzeń, generycznych i wyrażeń lambda
"jeśli nie jest ustawione inaczej", tj. Na górze 'CMakeLists.txt', użyj' projektu (myproject) 'zamiast powiedzieć 'projekt (myproject C)'. – congusbongus