Escribimos una aplicación principalmente en C
pero algunos submódulos están escritos en C++
(en Linux). El problema es cómo escribir archivos CMakeLists.txt
para usar g++
para algunos subdirectorios y gcc
para otro.Mezcla C y C++ con CMAKE
Respuesta
El compilador y el enlazador generalmente vienen determinados por la extensión del archivo si no se establece de otra manera. Por lo tanto, siempre que las terminaciones de los archivos estén correctas, su código se compilará y vinculará con el compilador correcto.
En una nota lateral, recuerde hacer las declaraciones externas correctas de C, si mezcla C y C++.
La diferencia entre g ++ y gcc es básicamente que g ++ pasa -lstdC++ al enlazador. Simplemente agregue la biblioteca estándar de C++ como una dependencia explícita de los módulos de C++.
Para ser claros, gcc puede compilar el código C++. gcc y g ++ son lo mismo en este sentido. La diferencia es solo que al usar g ++ no tiene que decirle explícitamente al compilador que se vincule con libstdC++.
Gracias, he reescrito la pregunta. Esta parte está bien, pero me gustaría saber cómo especificar gcc/g ++ para subdirectorios específicos. – Cartesius00
¿Cuál es la necesidad de usar g ++ en algunos subdirectorios si solo puede usar gcc y depender explícitamente de libstdC++ cuando sea necesario? – bames53
Tenemos que mezclar algunos códigos C y C++ existentes. – Cartesius00
Puede establecer la propiedad LANGUAGE de sus archivos de origen en "CXX". Ver documentation.
CMake lo hace automáticamente. Se puede entremezclar libremente ambos tipos de archivos en el archivo de CMakeLists.txt:
. . .
add_executable(
my_program
code.cpp
more_code.c
)
hago esto todo el tiempo y simplemente funciona.
Tenga en cuenta que necesita protectores de C-header. Entonces en code.cpp dirías 'extern" C "{#include" more_code.h "}' – Unapiedra
- 1. Mezcla C# con Objective-C
- 2. Mezcla C y objetivo-C
- 3. C++/CLI y CMake
- 4. Mezcla de Objective-C y C++
- 5. Mezcla de Haskell y C++
- 6. Problemas con CMake y Visual C++ 2010
- 7. CMake clang y C++ 0x
- 8. Mezcla C y archivos de ensamblaje
- 9. Errores de mezcla y excepciones en C#
- 10. Generar proyecto C# utilizando CMake
- 11. Mezcla de C# Code y umanaged C++ code en Windows con Visual Studio
- 12. OpenCV VS 2010 C++ CMake
- 13. mezcla de códigos C y D en el mismo programa?
- 14. Mezcla de proyectos C# y VB.NET = roto "Ir a definición"
- 15. Mezcla de diseño basado en políticas con CRTP en C++
- 16. Problema de vinculación con OpenCV y CMake
- 17. CMake con MinGW y Eclipse CDT
- 18. mezcla alfa 2 colores RGBA en C
- 19. Cualquier problema con la mezcla de bibliotecas con y sin std = C++ 0x
- 20. Vinculación de archivos C y CXX en CMake
- 21. Uso de cmake en Windows para C++
- 22. agregar soporte C++ 0x en cmake
- 23. C++ CMake (agregue archivos no construidos)
- 24. usando nullptr en lugar de NULL cuando se mezcla C y C++
- 25. Usar eficientemente SublimeText con SublimeClang para proyectos de CMake/C++
- 26. Establecer ruta en CMake (C++, ImageMagick)
- 27. CMAKE, Clang y C++ v11 en OS X 10.8
- 28. Django - Mezcla ListView y CreateView
- 29. Cómo vincular el programa C++ con Boost usando CMake
- 30. C++: Obtener el código de error c3859 durante la compilación en una mezcla de C++/CLI y C++
"si no se establece de otra manera", es decir, en la parte superior de 'CMakeLists.txt', use' project (myproject) 'en vez de 'proyecto (miproyecto C)'. – congusbongus