cmake-4学习,参考

了解

  • cmake的工作原理:

  • Windows下用cmake编译cmake

(1)先下载cmake(exe)

(2)编译源码文件

# -S表示源文件夹下;-B表示新建一个文件夹build,并将编译结果放在该文件build:【生成】
cmake -S . -B build # -G 使用nmake,指定编译工具
cmake -S . -B build -G "NMake Makefiles" # 生成Xcode执行的文件,
cmake -S . -B xcode -G "Xcode" # 直接打开xcode项目
cmake --open xcode # --build 执行编译(位置)和make功能一样:【编译】
cmake --build build # -j:支持多线程编译和和make一样
cmake --build build -j8 # --config 指定编译方式:Release或者Debug
cmake --build build --config Release # --install 指定安装位置
cmake --install build

动态库和静态库

  • 静态库:编译后的二进制代码,类似.o【编译时链接】

.lib文件:windows

.a文件:linux

举例:linux生成静态库

// xlog.h
#ifndef XLOG
#define XLOG
class xlog
{
public:
xlog();
}; #endif // xlog.cpp
#include "xlog.h"
#include <iostream>
using namespace std; xlog::xlog()
{
cout << "print xlog" << endl;
} # CMakeLists.txt
cmake_minimum_required(VERSION 3.20) project(xlog)
# STATIC:表示生成静态库
add_library(xlog STATIC xlog.cpp xlog.h)

然后执行:

# 生成
cmake -S . -B build
# 编译
cmake --build build

举例:链接静态库

在test_xlog/test_xlog.cpp中链接libxlog.a库

// test_xlog.cpp
#include <iostream>
#include "xlog.h"
using namespace std; int main()
{
xlog log;
cout << "test_xlog" << endl;
return 0;
} # CMakeLists.txt
cmake_minimum_required(VERSION 3.20) project(test_xlog) #指定头文件查找路径
include_directories("../xlog") #指定库查找路径
link_directories("../xlog/build") add_executable(test_xlog test_xlog.cpp) #指定加载的库【静态库:libxlog.a】
target_link_libraries(test_xlog xlog)
  • 动态库: 【运行时链接】

.lib文件(函数地址索引)和.dll文件(函数二进制代码):windows

.so文件:linux

.dylib:macOS

举例:生成动态库并链接使用

# CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(xlog) include_directories("xlog") # 编译生成动态库
add_library(xlog SHARED xlog/xlog.cpp) add_executable(test_xlog test_xlog/test_xlog.cpp)
target_link_libraries(test_xlog xlog)

注意:在windows中生成链接动态库时,需要设置一下才能同时生成:.dll和.lib文件,下面是兼容各平台的代码:

// xlog.h
#ifndef XLOG
#define XLOG #ifndef _WIN32
#define XCPP_API
#else
#ifdef xlog_EXPORTS
#define XCPP_API __declspect(dllexport) //库项目调用
#else
#define XCPP_API __declspect(dllimport) //调用库项目调用
#endif
#endif
class XCPP_API xlog
{
public:
xlog();
};
#endif

cmake-4的更多相关文章

  1. 使用cmake自动构建工程

    公司引擎是用cmake根据目标平台来构建工程的,刚接触的时候深深体会到cmake的方便:如果目标平台是windows,它可以帮你自动构建出vs工程:如果是安卓,自动构建出eclipse工程,如果是IO ...

  2. CMake

    使用CMake编译跨平台静态库 http://www.tuicool.com/articles/3uu2Yj cmake命令 安装.用法简介 https://fukun.org/archives/04 ...

  3. CMake学习笔记

    C++开发者必备技能CMake  先简单介绍一下,CMake是一个跨平台的编译工具,它可以根据不用的平台,不同的编译环境,生成不同的MakeFile,从而控制编译的过程. 使用CMake的步骤: 1. ...

  4. VS 2013编译64位版本QT 4.8.6及使用cmake为依赖QT生成VS项目时Could NOT find Qt4

    对于一些已经解决的问题,本博客不再讨论.只将本人遇到的问题做简单的说明. 一.VS 2013编译64位版本QT 4.8.6 QT项目官网中,对于QT4,其只提供了windows X86的版本,并且支持 ...

  5. cmake cannot find package

    cmake 找不到package,如 find_package (OpenMesh REQUIRED) 出现错误 在项目的文件夹中找到 FindOpenMesh.cmake 文件,将其所在路径添加到 ...

  6. Cmake的交叉编译

    http://www.cmake.org/Wiki/CMake_Cross_Compiling

  7. CMake命令/函数汇总(翻译自官方手册)

    查看官方文档 cmake命令 选项 CMake变量 CMake命令汇总 / add_custom_command add_custom_target/add_definitions/add_depen ...

  8. 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  9. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  10. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

随机推荐

  1. k8s之容器运行时

    Kubernetes 中的容器运行时 容器运行时(Container Runtime)是 Kubernetes 最重要的组件之一,负责真正管理镜像和容器的生命周期.Kubelet 通过 Contain ...

  2. 2.搭建K8S集群前置知识

    搭建K8S集群 搭建k8s环境平台规划 单master集群 单个master节点,然后管理多个node节点 多master集群 多个master节点,管理多个node节点,同时中间多了一个负载均衡的过 ...

  3. Visual Studio 快速分析 .NET Dump 文件

    前言 在开发和维护 .NET 应用程序的过程中,有时会遇到难以捉摸的性能瓶颈或内存泄漏等问题.这些问题往往发生在生产环境中,难以复现.为了更准确地诊断这些运行时问题,通常会收集应用程序在生产环境中的内 ...

  4. 干货分享:Air780E怎么连接华为云?

    ​ 众所周知,市面上有很多云平台,阿里云.腾讯云.中移OneNET.华为云.百度云.涂鸦云.TLink云等等......并且每家云平台都有自己的协议,工程师要移植不同的SDK代码或基于各家的手册文档对 ...

  5. 一个.NET开源、快速、功能丰富的跨平台阅读服务器

    前言 今天大姚给大家分享一个基于.NET开源的快速.功能丰富的跨平台阅读服务器,它的设计初衷是提供一个全面的解决方案,满足用户的所有阅读需求.用户可以设置自己的服务器,并与朋友和家人分享阅读收藏:Ka ...

  6. STM32的中断刨析(完结)

    STM32中断刨析 一直以来,学习了 stm32 和 freertos 但在思考 RTOS 的任务调度时,涉及到 stm32 的中断相关的 PendSV 就感觉糊里糊涂.本篇记录刨析 stm32 的中 ...

  7. Linux下使用谷歌输入法

    Linux的中文输入法一直太烂,scim终于出来对googlePinyin的支持了. 安装步骤: 1.安装scim: sudo apt-get install scim 2.从git上checkout ...

  8. 2022 Hangzhou Normal U Summer Trials

    Subarrays 给定一个长度为n的由正整数组成的序列,请你输出该序列中子段和能被\(k\)整除的所有符合要求的子段数量 题解:组合计数 + 前缀和 + 思维 \[sum[l,r]\ \ mod\ ...

  9. ZSTU2023校赛

    篠塚真佑実的树 给定\(n\)个节点的树,其中\(m\)个节点存在传送门,当飞船经过存在传送门的节点的时候,可以选择无消耗地传送至其他存在传送门的节点,现在有\(q\)次询问,每次询问给出起点\(st ...

  10. solon 集成 rocketmq5 sdk

    使用 rocketmq5 是比较简单的事情.也有些同学对 sdk 原始接口会陌生,会希望有个集成的示例. <dependency> <groupId>org.apache.ro ...