2011-11-11 95 views
13

我們主要在C中編寫應用程序,但是一些子模塊編寫在C++(在Linux上)。問題是如何編寫CMakeLists.txt文件以使用g++作爲一些子目錄,gcc作爲另一個。用CMAKE混合C和C++

回答

13

編譯器和鏈接器通常由文件擴展名確定(如果沒有另行設置)。因此,只要文件結尾沒問題,您的代碼就會被編譯並與正確的編譯器鏈接。

在附註中,如果混合使用C和C++,請記住做出正確的extern C聲明。

+2

的文件擴展名中選擇編譯器,如果「否則設置」,即在'CMakeLists.txt'的頂部,使用'project(myproject)'而不是'項目(myproject C)'。 – congusbongus

1

g ++和gcc的區別基本上就是g ++把-lstdC++傳遞給鏈接器。只需將C++標準庫添加爲C++模塊的顯式依賴項即可。

要明確,gcc可以編譯C++代碼。 gcc和g ++在這方面是一樣的。區別僅在於使用g ++時,您不必明確告訴編譯器鏈接到libstdC++。

+0

謝謝,我已經重寫了這個問題。這部分是好的,但我想知道,如何爲特定的子目錄指定gcc/g ++。 – Cartesius00

+0

如果你可以使用gcc並且在必要時明確依賴libstdC++,那麼在某些子目錄上使用g ++有什麼需要? – bames53

+0

我們必須混合一些現有的C和C++代碼。 – Cartesius00

5

CMake自動執行此操作。你可以自由地混合使用這兩種類型的文件在你的CMakeLists.txt文件:

. . . 
add_executable(
    my_program 
    code.cpp 
    more_code.c 
) 

我做這一切的時候,它就可以工作。

+2

請注意,您需要C-header守衛。所以在code.cpp中你會說'extern「C」{#include「more_code.h」}' – Unapiedra