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的直接编译的方式,将依赖库和应用一起编译完成,没有测试成功,总是报工具链不支持.

使用clangcmake

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

相关推荐
QiLinkOS15 分钟前
【从实验室到商业战场:发明专利如何重塑科技与企业的共生生态】
大数据·c语言·数据结构·c++·人工智能·单片机·算法
Irissgwe44 分钟前
c++11(lambda表达式与包装器、线程库)
c++·c++11·lambda表达式·线程库·包装器·互斥量库·条件变量库
Peter·Pan爱编程1 小时前
14. Lambda 表达式:随手可写的函数对象
c++·算法·ai编程
不想写代码的星星2 小时前
从分支预测角度看 C++:为什么你的热循环慢得离谱?
c++
郝学胜-神的一滴2 小时前
Qt 高级开发 018:复刻经典登录界面布局与窗口美化全解析
开发语言·c++·qt·程序人生·用户界面
郝亚军2 小时前
IEEE 754 单精度浮点的SEM表示
开发语言·c++·算法
Yyyyyy~4 小时前
【C++】数组篇
开发语言·c++
qq_333120974 小时前
C++高并发内存池的整体设计和实现思路_C 语言
java·c语言·c++
牛肉在哪里4 小时前
ros2 从零开始27 编写广播C++
开发语言·c++·机器人
Curvatureflight4 小时前
前端国际化 i18n 落地实践:语言包、动态文案和格式化问题怎么处理?
前端·c++·vue