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的功能一致.

相关推荐
努力实干16 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
syagain_zsx18 小时前
jsoncpp 使用指南:编译链接、Json::Value 取值与高频坑
c++·json·库·http格式
布莱克60519 小时前
理解 = delete 与 = default:两种赋值语义的差异
c++
小小、码农20 小时前
[特殊字符]【C++11】类的新功能全面解析:移动构造、移动赋值、default、delete、final 与 override
linux·开发语言·网络·c++
库玛西21 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
General_G1 天前
创建型模式—原型(Prototype)模式
c++·设计模式·原型模式
syagain_zsx1 天前
protobuf 实战:从 .proto 到 C++ 序列化的完整链路
c++·学习·程序人生·谷歌·protobuf
welfare9621 天前
新号别搞:C++_list
开发语言·c++
xiaoye-duck1 天前
《C++ 项目:手写大模型接入 SDK》云端 API 调用基础与 Apifox 调试实战
网络·c++·语言模型
坤坤子吖1 天前
Linux 线程同步与互斥——条件变量与线程同步
linux·开发语言·c++·笔记·学习