2601C++,cmake与导入

一,使用CMake模块编程

在实际的开发中,可能有更多使用CMake来开发C++程序,则如何在cmake中使用模块开发呢

这里Ubuntu25.10,其它均为默认环境(gcc15.2cmake3.31.6)

二,入门的程序

还是使用简单例程:

cpp 复制代码
import std;
int main()
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}

下面可用两个方法:

1,使用g++和cmake

2,其CMakelists.txt文件为:

下面再把直接使用前文命令预编译好后的CMakeLists.txt文件描述一下:

cpp 复制代码
cmake_minimum_required(VERSION 3.16)

project(importCMake LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmodules-ts")
add_executable(importCMake main.cpp)

include(GNUInstallDirs)
install(TARGETS importCMake
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

但是需要提前在当前目录编译:

cpp 复制代码
g++ -std=c++23 -fmodules-ts -fsearch-include-path -c bits/std.cc

从而生成相关std库依赖包.其它的编译处理方式与原编译一样.
直接使用类似下面Clang的直接编译的方式,将依赖库和应用一起编译完成,没有测试成功,总是报工具链不支持.

使用clang和cmake

其CMakeLists.txt的文件内容为:

cpp 复制代码
cmake_minimum_required(VERSION 3.31.6 FATAL_ERROR)
# 实验库CMake匹配GUID支持到 https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst查看,必须严格匹配
set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "0e5b6991-d74f-4b3d-a41c-cf096e0b2508")
# 设置Clang编译器
set(CMAKE_CXX_COMPILER "clang++")
set(CMAKE_C_COMPILER "clang")
# 使用Clang的libc++
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++")
set(CMAKE_CXX_EXTENSIONS OFF) # 避免编译命令设置 -std=gnu23
# C++23
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_MODULE_STD 1) # 自动编译 std 模块
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 生成 compile_commands.json 文件
project(importCMake2 LANGUAGES CXX)
add_executable(importCMake2)
target_sources(importCMake2
  main.cpp
)

上面CMake文件中,编译器使用提Clang.试了一上午使用g++没有搞定.查询各种信息和相关配置说明,都无法直接使用``cmakelists.txt文件一步生成相关文件.如果如前预编译好gcm文件,倒是也可用CMake,但这样不方便.

三,编译和处理

这里重点分析一下Clang+CMake的编译.上面相关文件编写完成后,可如下编译:

进入工程目录

cpp 复制代码
mkdir build
cd build
cmake -G Ninja ..
ninja

此时会报错误略.

从错误提示可见需要安装相关Clang自己的libc++的库,使用如下:

cpp 复制代码
sudo apt install libc++-dev

重新编译即可成功.在build/CMakeFiles/__cmake_cxx23.dir目录下,可见std.pcm,这和前文中的std.o的功能一致.

相关推荐
weixin_424183617 小时前
开放—封闭原则实战(下):基于策略的流程编排与编译期多态
c++·分布式·系统架构
wuminyu7 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
m0_380743877 小时前
C++中的freopen的用法实例详解
开发语言·c++
jimy18 小时前
polymorph.cpp里面的“析构函数、智能指针”问题
开发语言·c++
朝朝辞暮i9 小时前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
朝朝辞暮i9 小时前
C++ 第 4 课:if / else —— 让程序自己做决定
开发语言·c++
苏打豆9 小时前
Pinocchio源码阅读——刚体运动物理量空间变换及求导
c++·线性代数·算法·矩阵·机器人
m0_3807438710 小时前
Qt中导航栏实现的详细指南
开发语言·c++
估值探索者10 小时前
【Python量化策略实战 #02】多因子合成mom和vol两因子打分合成
开发语言·c++·python·数据挖掘·c#
思麟呀10 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法