cmake-4

cmake · 浏览次数 : 57

小编点评

## CMake构建c++项目快速入门2-1 cmake构建c++项目快速入门2-2了解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或者Debugcmake --build build --config Release# --install 指定安装位置cmake --install build动态库和静态库静态库静态库:编译后的二进制代码,类似.o【编译时链接】.lib文件:windows.a文件:linux举例:linux生成静态库// xlog.h#ifndef XLOG#define XLOGclass xlog{public: xlog();};#endif// xlog.cpp#include \"xlog.h\"#include <iostream>using namespace std;xlog::xlog(){ cout << \"print xlog\" << endl;}# CMakeLists.txtcmake_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.txtcmake_minimum_required(VERSION 3.20)project(test_xlog)#指定头文件查找路径include_directories(\"../xlog\")#指定库查找路径link_directories(\"../xlog/build\")add_executable(test_xlog test_xlog/test_xlog.cpp)#指定加载的库【静态库:libxlog.a】target_link_libraries(test_xlog xlog)动态库: 【运行时链接】.lib文件(函数地址索引)和.dll文件(函数二进制代码):windows.so文件:linux.dylib:macOS举例:生成动态库并链接使用# CMakeLists.txtcmake_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#endifclass XCPP_API xlog{public: xlog();};#endif

正文

cmake-4学习,参考

了解

  • cmake的工作原理:

image-20221216000527838

  • 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

动态库和静态库

image-20221224175704223

  • 静态库:编译后的二进制代码,类似.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

image-20221224155203769

举例:链接静态库

在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)

image-20221224181213903

注意:在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-4

cmake-4学习,参考 cmake构建c++项目快速入门2-1 cmake构建c++项目快速入门2-2 了解 cmake的工作原理: Windows下用cmake编译cmake (1)先下载cmake(exe) (2)编译源码文件 # -S表示源文件夹下;-B表示新建一个文件夹build,并将编译

CMake/001-Hello CMake

开始学习使用CMake 建立工程(本文以实践为目的,注重实践) 1. 先安装CMake 2. 创建一个最简单的CMake工程 a. 准备工作(找一个空目录,建立如下文件) b. hello.cpp文件内容如下 #include #include void

Qt Quick 用cmake怎么玩子项目

实际工程中,很多时候需要做到工程的分散,尤其是涉及到保密的源码模块。这里以Qt Quick为例基于cmake演示一遍工程的多项目化。

Ollama开发指南

安装必备工具 确保已安装以下软件的正确版本: CMake 3.24 或更高版本 Go 1.22 或更高版本 GCC 11.4.0 或更高版本 使用 Homebrew 安装这些工具(适用于macOS和Linux): brew install go cmake gcc 可选:启用调试与详细日志 构建时开

cmake构建32位应用程序

1. 背景介绍 2. 工具介绍 3. 环境搭建 4. MinGW编译器版本 1. 背景介绍 最近需要使用第三方动态库文件G33DDCAPI.dll进行二次开发。由于这个动态库文件生成的时间比较早,且只提供了32位的版本,并没有提供源代码。如果希望利用这个动态库进行开发,有两种解决方法: 编译64位应

【Qt6】QWindow类可以做什么

原来的水文标题是“用 VS Code 搞 Qt6”,想想还是直接改为“Qt6”,反正这个用不用 VS Code 也能搞。虽然我知道大伙伴们都很讨厌 CMake,但毕竟这厮几乎成了 C++ 的玩家规范了。Qt 也算识大体,支持用 CMake 来构建程序。所以,只要你用的是能写 C++ 的工具,理论上都

CUDA C编程权威指南:2.1-CUDA编程模型

本文主要通过例子介绍了CUDA异构编程模型,需要说明的是Grid、Block和Thread都是逻辑结构,不是物理结构。实现例子代码参考文献[2],只需要把相应章节对应的CMakeLists.txt文件拷贝到CMake项目根目录下面即可运行。 1.Grid、Block和Thread间的关系 GPU中最

[Cmake Qt]找不到文件ui_xx.h的问题?有关Qt工程的问题,看这篇文章就行了。

前言 最近在开发一个组件,但是这个东西是以dll的形式发布的界面库,所以在开发的时候就需要上层调用。 如果你是很懂CMake的话,ui_xx.h的文件目录在 $ 下 然后除了有关这个ui_xx.h,还有一些别的可以简单聊聊的 一、父子工程组织,或者说依赖关系 在使用CMake进行开发的时候,一般可以

Pybind11和CMake构建python扩展模块环境搭建

使用pybind11的CMake模板来创建拓展环境搭建 从Github上下载cmake_example的模板,切换分支,并升级pybind11子模块到最新版本 拉取pybind11使用cmake构建工具的模板仓库 git clone --recursive https://github.com/mr

使用CEF(六)— 解读CEF的cmake工程配置

距离笔者的《使用CEF》系列的第一篇文章居然已经过去两年了,在这么长一段时间里,笔者也写了很多其它的文章,再回看《使用CEF(一)— 起步》编写的内容,文笔稚嫩,内容单薄是显而易见的(主要是教大家按部就班的编译libcef_dll_wrapper库文件)。笔者一直以来的个性就是希望自己学习到的知识,