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

相关推荐
rainbow688941 分钟前
Linux文件描述符与重定向原理
c++
CodeSheep程序羊1 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
编程小白20262 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
.小墨迹2 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
历程里程碑3 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴3 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
天若有情6733 小时前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密
czy87874754 小时前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
我在人间贩卖青春4 小时前
C++之继承的方式
c++·private·public·protected·继承方式
智者知已应修善业5 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法