【CMake】CMake快速使用教程


前言

如果你觉得makefile看着就头痛,如果当工程越来越大,你越来越手足无措,如果你厌倦了在编译的时候打上一大堆命令,那么你有必要花十分钟来看一下下面的内容。。

一、创建简单的Hello World工程

首先创建一个demo文件夹,里面创建一个main.c文件,内容如下:

#include <stdio.h>
int main(int argc, char const *argv[]) {
    
    
    printf("Hello World!\n");
    return 0;
}

再创建一个CMakeLists.txt

PROJECT (HELLO)
SET(SRC_LIST main.c)
ADD_EXECUTABLE(hello ${
    
    SRC_LIST})

第一行:设置项目名称;
第二行:将SRC_LIST值设置为main.c
第三行:生成可执行文件 hello。 ${} 是引用某个值。

在根目录中创建build文件夹,用于外部构建(编译所产生的文件都生成在build目录),进入build目录,分别执行如下三条命令:

cmake ../
make
./hello

如下图所示:
在这里插入图片描述

二、库的构建与安装

1)建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用,HelloFunc 向终端输出Hello World 字符串; 2)安装头文件与共享库,目录安排如下:

在这里插入图片描述

其中各个文件夹代表意义:
build - 用于外部编译;

libhello - hello库的源文件,其包含的文件内容如下:

hello.c

#include "hello.h"
#include <stdio.h>
void hello(const char *name) {
    
     printf("Hello %s!\n", name); }

hello.h

#ifndef _HELLO_H_
#define _HELLO_H_

#ifdef __cplusplus
extern "C" {
    
    
#endif

void hello(const char* name);

#ifdef __cplusplus
}
#endif

#endif /* _HELLO_H_ */

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
set(LIB_SRC hello.c)
add_library(libhello STATIC ${
    
    LIB_SRC})
set(LIBRARY_OUTPUT_PATH ${
    
    PROJECT_BINARY_DIR}/lib)
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
install(TARGETS libhello
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(FILES hello.h DESTINATION include/hello)

src - 执行文件的文件夹

main.c

#include "hello.h"
int main(int argc, char const *argv[]) {
    
    
    hello("Jack");
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
include_directories(${
    
    PROJECT_SOURCE_DIR}/libhello)
set(APP_SRC main.c)
set(EXECUTABLE_OUTPUT_PATH ${
    
    PROJECT_BINARY_DIR}/bin)
add_executable(main ${
    
    APP_SRC})
target_link_libraries(main libhello)

最外层根目录CMakeLists.txt:

project(HELLO)
add_subdirectory(src)
add_subdirectory(libhello)

说明:

除build目录外每一个目录都要建立一个CMakeLists.txt.

生成库的语句:add_library(libhello STATIC ${LIB_SRC})

这条语句是建立静态库,若要建立动态库的话将STATIC改成SHARED.

install命令负责库的安装。

make一下,结果就像这样:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_61011506/article/details/120890443