CMake

本文介绍如何使用CMake生成Makefile,包括设置项目名称、添加可执行文件及库文件的方法。演示了如何组织源文件到不同目录,并配置头文件路径及输出目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用:用来生成MakeFile;

优点:跨平台

官方教程: 

https://cmake.org/documentation///文档总链接地址
https://cmake.org/cmake/help/latest/guide/tutorial/index.html//培训教程

 

单个文件: 

project(HELLO)                                   //设置工程名;
add_executable(hello ./main.c)          //生成可执行文件  名称;所需源文件

多个源文件:

project(HELLO)                                        //
set(SRC_LIST main.c hello.c)                  //定义了变量SRC_LIST
add_executable(hello ${SRC_LIST}) //相当于add_executable(hello main.c hello.c)

生成库文件:

project(HELLO)
add_library(libhello hello.c)//生成静态库文件;
add_executable(hello main.c)
target_link_libraries(hello libhello)//为目标指定库文件;

将源文件组织到不同目录:

 

 顶层 CMakeLists.txt

        cmake_minimum_required(VERSION 3.5)
        project(HELLO)
        add_subdirectory(libhello)//
        add_subdirectory(src)      
//
让cmake 去子目录中寻找新的CMakeLists.txt 文件并解析它;

src 目录下的 CMakeLists.txt

        include_directories(${PROJECT_SOURCE_DIR}/libhello)

//include_directories 命令用来指明头文件所在的路径,并且使用到了 PROJECT_SOURCE_DIR 变量,该变量表示工程源码的目录

        set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
//可执行文件存放在 build 目录下的 bin 目录中
        add_executable(hello main.c)
        target_link_libraries(hello libhello)

libhello 目录下的 CMakeLists.txt

        set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

//将库文件存放在 build 目录下的 lib 目录中

        add_library(libhello hello.c)
        set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")

 最终结构:

├── build
│         ├── bin
│         │      └── hello
│         └── lib
│                 └── libhello.a
├── CMakeLists.txt
├── libhello
│         ├── CMakeLists.txt
│         ├── hello.c
│         └── hello.h
├── src
├── CMakeLists.txt
└── main.c