cmake学习笔记

cmake学习笔记


一、入门案列1

🐹 vim main.c

#include <stdio.h>
int main(){
        printf("Hello World!\n");
        return 0;
}

🐹 vim CMakeLists.txt

# 表示需要cmake的最低版本
make_minimum_required (VERSION 2.8)
# 工程名
project (p_hello)
# 二进制elf文件名和所需的源码文件
add_executable(hello main.c)
# 执行cmake
cmake .
# ls 查看目录会多出很多文件,执行make
make
# 执行elf文件
./hello
	Hello World!

二、案列2

🐹 vim fun.h

#include <stdio.h>
void add_put();

🐹 vim fun.c

#include "fun.h"
void add_put(){
        printf("steins gate!\n");
}

🐹 vim main.c

#include "fun.h"
int main(){
        printf("Hello World!\n");
        add_put();
        return 0;
}

🐹 更改CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
project (p_hello)
add_executable(hello main.c fun.c)

🐹 重新执行cmake和make

执行时如果报错,可以使用vim多窗口功能对比代码,查看是否有语法或逻辑错误

# 首先打开main.c
vim main.c
# 在指令模式下输入加载fun.c
:sp fun.c
# 在指令模式下输入加载fun.h
:sp fun.h

效果图如下:
在这里插入图片描述

三、修改源文件索引

在CMakeLists.txt中,add_executable执行的文件过多时,最好用aux_source_directory 替代源文件索引

# 参数分别是 目录 变量
aux_source_directory(dir var)

修改案列2的CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
project (p_hello)
# 查找当前目录"." 的源码文件,并将其储存在SRC_DIR变量中
aux_source_directory(. SRC_DIR)
# 变量自动转换为源码文件
add_executable(hello ${SRC_DIR})

四、将子目录里面的源码编译成静态库编译

首先在当前目录创建一个adddir目录,进入adddir目录

🐹 vim add.h

int add_num(int a, int b);

🐹 vim add.c

include <stdio.h>
#include "add.h"
int add_num(int a, int b){
        return a + b;
}

🐹 vim CMakeLists.txt

aux_source_directory(. SRC_LIB)
# 生成命为add_fun的链接库
add_library(add_fun ${SRC_LIB})

🐹 回到上一级目录

🐹 vim main.c

#include "fun.h"
#include "adddir/add.h"
int main(){
        printf("Hello World!\n");
        add_put();
        printf("15 + 18 = %d\n", add_num(15, 18));
        return 0;
}

🐹 vim CMakeLists.txt

make_minimum_required (VERSION 2.8)
project (p_hello)
aux_source_directory(. SRC_DIR)
# 添加子目录adddir
add_subdirectory(adddir)
add_executable(hello ${SRC_DIR})
# 链接自己的静态库
target_link_libraries(hello add_fun)

🐹 重新 cmake 和 make

五、直接添加子目录进行编译

👼 添加子目录subdir进入其中

👼 vim sub.h

int sub_num(int a, int b);

👼 vim sub.c

#include <stdio.h> 
#include "sub.h"
int sub_num(int a, int b){
        return a - b;
}

👼 回到上级目录将函数添加到main.c

👼 vim CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
project (p_hello)
aux_source_directory(. SRC_DIR)
aux_source_directory(./subdir SUB_DIR)
add_subdirectory(adddir)
add_executable(hello ${SRC_DIR} ${SUB_DIR})
target_link_libraries(hello add_fun)

六、clion编译多线程

在MCakelist.txt中添加

find_package(Threads REQUIRED)
target_link_libraries(obj_name Threads::Threads)

gcc编译则在最后加上 -pthread

待续……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值