CMake项目实战指令详细分析

CMake是一个跨平台的自动化构建系统,可以用简单的语句来描述所有平台的编译过程。CMake可以输出各种各样的编译文件,如Makefile、VisualStudio等。

CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so (shared object))。

你可以在CMakeLists.txt中指定源文件、头文件、库文件、链接库等信息,然后通过cmake命令生成相应的makefile文件。

文章目录

    • 1. 单main.c文件输出"hello world"
    • 2. 使"hello world"更像一个工程文件

1. 单main.c文件输出"hello world"

mian.c

#include 
int main(){
    printf("hello world!\n");
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.15) 
PROJECT(HELLO)
SET(CMAKE_C_COMPILER gcc)

SET(SRC_LIST main.c)
MESSAGE(STATUS "This is BINARY dir" ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
  • cmake_minimum_required(VERSION X.X) : 指定cmake的最低版本。

  • project( project_name ) : 指定工程名称,这个指令隐式的指定了两个CMake变量,那就是_BINARY_DIR,_SOURCE_DIR。在这个例程中,我们命名project_name为HELLO,所以也指定了HELLO_BIARY_DIR和HELLO_SOURCE_DIR。所以当我们更改了工程名之后,_BINARY_DIR和_SOURCE_DIR也要跟着改变。但是!如果我们使用PROJECT_BINARY_DIR和PROJECT_BINARY_DIR,那么工程名随便改动,这两个变量名会随之改变

    MESSAGE(STATUS "This is BINARY dir" ${PROJECT_BINARY_DIR})
    MESSAGE(STATUS "This is SOURCE dir" ${PROJECT_SOURCE_DIR})
    
  • set(CMAKE_C_COMPILER gcc) : 指定CMake使用gcc编译器来编译C代码

  • SET(SRC_LIST main.c) : SET 还可以显式的定义变量,语法是这样的:

    SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]) 
    

    现阶段,你只需要知道SET可以显式的定义变量即可。如果有多个源文件,还可以这样定义:SET(SRC_LIST main.c t1.c t2.c)

  • MESSAGE的语法是这样的:

    MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)
    

    这个指令用于向终端输出用户定义的信息,包含了三种类型:

    1. SEND_ERROR,产生错误,生成过程被跳过。

    CMake Error at CMakeLists.txt:6 (MESSAGE):
    This is BINARY dir/home/zch/CmakePratice/t1/build

    CMake Error at CMakeLists.txt:7 (MESSAGE):
    This is SOURCE dir/home/zch/CmakePratice/t1

    1. SATUS,输出前缀为–的信息。

    – This is BINARY dir/home/zch/CmakePratice/t1/build
    – This is SOURCE dir/home/zch/CmakePratice/t1

    1. FATAL_ERROR,立即终止所有 cmake 过程.

    CMake Error at CMakeLists.txt:6 (MESSAGE):
    This is BINARY dir/home/zch/CmakePratice/t1/build

    – Configuring incomplete, errors occurred!

  • ADD_EXECUTABLE(hello ${SRC_LIST})
    定义了这个工程会生成一个文件名为 hello 的可执行文件,相关的源文件是 SRC_LIST 中
    定义的源文件列表, 本例中你也可以直接写成 ADD_EXECUTABLE(hello main.c)。

2. 使"hello world"更像一个工程文件

你可能感兴趣的:(Linux网络编程,cmake)