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 给定的命令列格式编译。

加入编译选项 编辑