CMake 入門/自訂程式語言

啟用其他語言 编辑

在預設的情況下 CMake 會啟用 C、C++ 兩種程式語言,CMake 內建了幾種常見 C、C++ 編譯器的相關知識,通常我們不需要費心思去操心編譯細節。如果是 CMake 不認得的程式語言或編譯器,就需要指定相關的編譯規則。

舉個具體的例子,撰寫 Win32 程式時常用到 Windows Resource 語言,必須將 .rc 檔案編譯成 .res 檔,再和其他 C、C++ 的 .obj 連結成最後的程式。在 Visual C++ 這並不會造成任何困擾,只要把 .rc 檔當成一般的原始碼一起餵給 add_executable() 等指令,Visual C++ 的統一編譯窗口 cl.exe 會自動處理,不勞您費心。然而其它的編譯器未必有如此貼心的服務,例如 MinGW 的 gcc 就不會主動呼叫 windres 來編譯資源檔,我們必須手動指定。

利用 enable_language() 可以啟用一個程式語言,通常還必須要設定幾個變數告訴 CMake 這個語言的編譯器名稱、原始碼附檔名、輸出檔附檔名、命令列格式等等。由於 CMake 對 resource file 已經有部分的知識,我們只要設定編譯器名稱和用法即可。

if(MINGW)
    set(CMAKE_RC_COMPILER_INIT windres)
    enable_language(RC)
    set(CMAKE_RC_COMPILE_OBJECT
        "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
endif()

然後將 .rc 檔當成一般的原始碼加到 add_executable()、 add_library() 之中,CMake 就會自動辨識 .rc 檔並且用上面 CMAKE_RC_COMPILE_OBJECT 給定的命令列格式編譯。

加入編譯選項 编辑