Scriviamo un'applicazione principalmente in C
ma alcuni sotto-moduli sono scritti in C++
(su Linux). Il problema è come scrivere i file CMakeLists.txt
per utilizzare g++
per alcune sottodirectory e gcc
per un altro.Miscelazione di C e C++ con CMAKE
risposta
Il compilatore e il linker sono in genere determinati dall'estensione del file se non diversamente impostato. Finché le terminazioni dei file vanno bene, il tuo codice è compilato e collegato al compilatore corretto.
In una nota a margine, ricordarsi di eseguire le dichiarazioni C extern corrette, se si mescolano C e C++.
La differenza tra g ++ e gcc è fondamentalmente che g ++ passa -lstdC++ al linker. Basta aggiungere la libreria standard C++ come dipendenza esplicita dei moduli C++.
Per essere chiari, gcc può compilare codice C++. gcc e g ++ sono uguali in questo senso. La differenza è solo che quando usi g ++ non devi dire esplicitamente al compilatore di collegarsi a libstdC++.
Grazie, ho riscritto la domanda. Questa parte è OK, ma mi piacerebbe sapere come specificare gcc/g ++ per sottodirectory specifiche. – Cartesius00
Qual è la necessità di usare g ++ su alcune sottodirectory se si può semplicemente usare gcc e dipendere esplicitamente da libstdC++ quando necessario? – bames53
Dobbiamo mescolare alcuni codici C e C++ esistenti. – Cartesius00
È possibile impostare la proprietà LANGUAGE dei file di origine su "CXX". Vedi documentation.
CMake esegue questa operazione automaticamente. È possibile mischiare liberamente entrambi i tipi di file nel file CMakeLists.txt:
. . .
add_executable(
my_program
code.cpp
more_code.c
)
Lo faccio tutto il tempo e funziona solo.
Nota che hai bisogno di protezioni C-header. Quindi in code.cpp diresti "extern" C "{#include" more_code.h "}' – Unapiedra
- 1. Miscelazione di file C e Assembly
- 2. C++/CLI e CMake
- 3. Problemi con CMake e Visual C++ 2010
- 4. miscelazione obiettivo-c e rapido quando sottoclasse
- 5. Quali sono le insidie e i trucchi della miscelazione di Objective-C e C?
- 6. CMake, C++ e Jenkins/Integrazione continua
- 7. Miscelazione di C++ 11 std :: thread e thread di sistema C (cioè pthreads)
- 8. utilizzando nullptr invece di NULL durante la miscelazione C e C++
- 9. Genera progetto C# utilizzando CMake
- 10. miscelazione largo e stretto letterali stringa in C
- 11. CMake generatore di espressione, differenziare C/C++ di codice
- 12. OpenCV VS 2010 C++ CMake
- 13. Miscelazione del design basato su criteri con CRTP in C++
- 14. CMake clang and C++ 0x
- 15. Problema di collegamento con OpenCV e CMake
- 16. build C++ in modalità di debug con biicode cmake
- 17. Configurazione di un progetto C++ OpenCV con Cmake
- 18. Uso efficiente di SublimeText con SublimeClang per progetti CMake/C++
- 19. LTO con LLVM e CMake
- 20. CMake disable -std = C++ 11 flag per i file C
- 21. Miscelazione di Hamcrest e TestNG
- 22. Usando cmake su windows per C++
- 23. C++ CMake (aggiungi file non creati)
- 24. aggiungere supporto C++ 0x in cmake
- 25. Compila OpenCV con CMake e minGW
- 26. packaging C++ programma usando librerie boost con cmake/cpack
- 27. Attivazione del supporto C++ 11 in NVCC con CMake
- 28. CMAKE, Clang e C++ v11 su OS X 10.8
- 29. miscelazione MarshalByRefObject e Serializable
- 30. miscelazione eccellenti e classici chiamate in Python
"se non è impostato diversamente", cioè nella parte superiore di 'CMakeLists.txt', utilizzare' project (myproject) 'invece di dire 'progetto (myproject C)'. – congusbongus