我們主要在C
中編寫應用程序,但是一些子模塊編寫在C++
(在Linux上)。問題是如何編寫CMakeLists.txt
文件以使用g++
作爲一些子目錄,gcc
作爲另一個。用CMAKE混合C和C++
回答
編譯器和鏈接器通常由文件擴展名確定(如果沒有另行設置)。因此,只要文件結尾沒問題,您的代碼就會被編譯並與正確的編譯器鏈接。
在附註中,如果混合使用C和C++,請記住做出正確的extern C聲明。
g ++和gcc的區別基本上就是g ++把-lstdC++傳遞給鏈接器。只需將C++標準庫添加爲C++模塊的顯式依賴項即可。
要明確,gcc可以編譯C++代碼。 gcc和g ++在這方面是一樣的。區別僅在於使用g ++時,您不必明確告訴編譯器鏈接到libstdC++。
謝謝,我已經重寫了這個問題。這部分是好的,但我想知道,如何爲特定的子目錄指定gcc/g ++。 – Cartesius00
如果你可以使用gcc並且在必要時明確依賴libstdC++,那麼在某些子目錄上使用g ++有什麼需要? – bames53
我們必須混合一些現有的C和C++代碼。 – Cartesius00
您可以將源文件的LANGUAGE屬性設置爲「CXX」。請參閱documentation。
CMake自動執行此操作。你可以自由地混合使用這兩種類型的文件在你的CMakeLists.txt文件:
. . .
add_executable(
my_program
code.cpp
more_code.c
)
我做這一切的時候,它就可以工作。
請注意,您需要C-header守衛。所以在code.cpp中你會說'extern「C」{#include「more_code.h」}' – Unapiedra
- 1. 混合C和C++
- 2. c和C++混合
- 3. c#,C++和C的混合
- 4. 混合語言C++,C和Fortran編譯與CMake的
- 5. 在CMake中混合使用C和C++,CMakeCCompilerId.c和我該如何丟棄它
- 6. 使用CMake鏈接到可可庫(C++與Objective-C混合)
- 7. 混合C和Objective-C
- 8. 混合C++和Objective C的
- 9. 問題混合C和C++
- 10. 混合JavaScript和C#
- 11. 混合c#和vC++
- 12. 混合gtk +和C++
- 13. 使用C++/C混合COBOL
- 14. 混合Objective-C和C++和OpenCV
- 15. 混合C/C++庫
- 16. CMake和C++/CLI,C#
- 17. 混合.c和.h文件
- 18. 混合Swift和Objective-C
- 19. 混合JQuery和Objective C
- 20. C中混合'switch'和'while'
- 21. 混合Objective-C和C++代碼
- 22. 在xcode中混合C和目標C
- 23. 命名空間和C++/C混合頭
- 24. ivars當混合C和Objective-C
- 25. MakeFile.am:混合c和C++,新錯誤
- 26. 混合C和C++時出錯
- 27. 在C + +和C混合陣列#
- 28. 混合本機C++和C++/CLI
- 29. C#混合流
- 30. C++/CLI和CMake
的文件擴展名中選擇編譯器,如果「否則設置」,即在'CMakeLists.txt'的頂部,使用'project(myproject)'而不是'項目(myproject C)'。 – congusbongus