浅聊如何在Windows上使用GCC14.1且使用C++23的std::print输出Hello, World

目录

前言

下载最新的Mingw编译套件

编写CMake引导使用GCC14.1


前言

笔者这几天也在简单的学习现代C++23,这边也是听闻GCC出14.1了支持更好了,因此准备尝试以下使用GCC14玩玩C++23

下载最新的Mingw编译套件

如果看官没有特殊的需求,可以直接一步到位:

MSYS2: Mingw下载:Downloads - MinGW-w64可以进行挑选

懒得挑选的直接GCC14.1:https://github.com/brechtsanders/winlibs_mingw/releases/download/14.1.0posix-18.1.8-12.0.0-ucrt-r3/winlibs-i686-posix-dwarf-gcc-14.1.0-llvm-18.1.8-mingw-w64ucrt-12.0.0-r3.zip

放到一个位置上解压即可。

添加相关的环境变量引导后续我们构建程序的时候采用我们的GCC14.1的库:

添加最好,而且对于我这种的还要放在顶层先,防止链接错误的库导致程序行为诡异

(本人放到了D盘下的New Mingw目录,看官自行添加一个指向到bin目录的环境路径)

编写CMake引导使用GCC14.1

方法有很多,这里笔者简单的写了一个配置,看官酌情参考与修改:

cmake_minimum_required(VERSION 3.5.0)
# 这里设置我们新添加的编译器,两种选择,一种在VSCode里锁定这个新的
# 编译套装,但是笔者这里只是临时体验,所以采用工程指定的方式
# CMAKE_C_COMPILER声明了要用到的C编译器
set(CMAKE_C_COMPILER "D:/New Mingw/bin/gcc.exe")
# CMAKE_CXX_COMPILER声明了要用到的C++编译器
set(CMAKE_CXX_COMPILER "D:/New Mingw/bin/g++.exe")
​
# 之后才能开始工程配置,这顺序不能搞错了
project(printDemo VERSION 0.1.0 LANGUAGES C CXX)
# 指定使用C++23 + 调试符号保留
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++23")
​
add_executable(printDemo main.cpp)
​
# 先别急这个事情,之后我会说
# target_link_libraries(printDemo "D:/New Mingw/lib/libstdc++exp.a")

很简短的CMakeLists,下面我们来看看主文件:

#include <chrono>
#include <iostream>
#include <print>
​
int main() {
  auto text = std::format("{0} hex is {0:08X}", 42);
  auto now = std::chrono::system_clock::now();
  auto date = std::format("Today is {:%Y-%m-%d}", now);
  std::cout << date << '\n';
}

我们编译项目,有一定概率翻车:

undefined reference to `std::__write_to_terminal(void*, std::span<char, 18446744073709551615ull>)'

我们需要去:GCC 14 Release Series — Changes, New Features, and Fixes - GNU Project,然后会注意到这一行:

std::print and std::println (requires linking with -lstdc++exp on Windows).

这下看懂了:

target_link_libraries(printDemo "D:/New Mingw/lib/libstdc++exp.a")

之后项目就可以通过编译。但是运行上可能还会出现找不到库的问题,所以这就是为什么我要在一开始有要求添加环境变量了,省事。不过,当你添加了这块变量,可能就不需要

target_link_libraries(printDemo "D:/New Mingw/lib/libstdc++exp.a")

了,这是因为搜索路径已经包含了,(我说怎么ld这么久)

现在欢乐的运行程序

➜  .\printDemo.exe
Today is 2024-07-27

完事。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值