cmake-4
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的更多相关文章
- 使用cmake自动构建工程
公司引擎是用cmake根据目标平台来构建工程的,刚接触的时候深深体会到cmake的方便:如果目标平台是windows,它可以帮你自动构建出vs工程:如果是安卓,自动构建出eclipse工程,如果是IO ...
- CMake
使用CMake编译跨平台静态库 http://www.tuicool.com/articles/3uu2Yj cmake命令 安装.用法简介 https://fukun.org/archives/04 ...
- CMake学习笔记
C++开发者必备技能CMake 先简单介绍一下,CMake是一个跨平台的编译工具,它可以根据不用的平台,不同的编译环境,生成不同的MakeFile,从而控制编译的过程. 使用CMake的步骤: 1. ...
- 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的版本,并且支持 ...
- cmake cannot find package
cmake 找不到package,如 find_package (OpenMesh REQUIRED) 出现错误 在项目的文件夹中找到 FindOpenMesh.cmake 文件,将其所在路径添加到 ...
- Cmake的交叉编译
http://www.cmake.org/Wiki/CMake_Cross_Compiling
- CMake命令/函数汇总(翻译自官方手册)
查看官方文档 cmake命令 选项 CMake变量 CMake命令汇总 / add_custom_command add_custom_target/add_definitions/add_depen ...
- 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
随机推荐
- chrome浏览器自定义安装方法
chrome浏览器有很多比较好的方面,也是很多人首选的浏览器.对于想自定义安装chrome浏览器的小伙伴来说,关于chrome浏览器默认安装到C盘让人很无奈.网上有说直接将C盘的文件夹放到想安装的文件 ...
- 题解:CF1301D Time to Run
CF1301D Time to Run 题解 思维题. 分析 把一个格子视作一个点,每个点的度数都是偶数,所以这是一张欧拉图.而需要走遍整个方格图,可以证明只要 \(k\) 不超过 \(4nm-2n- ...
- Python之subprocess 执行报错
问题 我用subprocess 执行命令查 主机Ip 报错 command = """ "grep {0} /etc/hosts | awk '{print ...
- DDCA —— 大缓存、虚拟内存:多核缓存、NUCA缓存、页表等
1. 缓存中的多核问题 1.1 多核系统中的缓存 Intel Montecito缓存 两个 core,每个都有一个私有的12 MB的L3缓存和一个1 MB的L2缓存,图中深蓝色部分均为L3缓存. 在多 ...
- 数据库研发人员必看的MySQL 8.0新特性
本文汇总了MySQL8.0 面向开发的新特性,总共有12个新特性,有想快速了解8.0新特性的朋友,可以看一下哈文章目录:1.公用表达式支持-CTE2.窗口函数3.表达式作为默认值:4.CHECK支持5 ...
- 2013年ImportNew最受欢迎的10篇文章
2013年即将过去,提前祝大家元旦快乐,ImportNew 整理出了本年度最受欢迎的前10篇Java和Android技术文章,每篇文章仅添加了摘要.如果您是我们的新访客,那下面这些文章不能错过.如果您 ...
- 查壳工具之Exeinfo PE
简介 Exeinfo PE是一款免费.专业的程序查壳软件,可以查看exe.dll程序的编译信息,开发语言,是否加壳,壳的种类以及入口地址等信息. Exeinfo PE下载地址:https://gith ...
- .NET Conf China 2024 AI相关内容解析
.NET Conf China 2024中国 .NET 开发者峰会即将在上海召开,这次大会是一届完全由社区组织举办的中国.NET 开发者盛会,我们筹备大会之初就定下了大会的主题是"智能.创新 ...
- IEDA 控制台乱码解决
1.修改idea 目录下的文件 idea64.exe.vmoptions idea.exe.vmoptions 在这个文件尾部增加 -Dfile.encoding=UTF-8 2.编辑ieda 文件配 ...
- cmd操作license服务
配置客户机的时候,有时候需要自启动相关服务,例如ArcGIS License Manager. 关于启动服务,参考了别人的意见.点击打开链接 最终用了net start 服务名和net sop 服务名 ...