如何修复介子生成不正确的链接器标志(--子系统控制台)

How to fix meson generating an incorrect linker flag (--subsystem console)

我创建了一个简单的项目来让自己习惯介子,但构建一直失败。

这就是我所做的(设置环境和构建):

set CC=clang
set CC_LD=lld
set CFLAGS="--target x86_64-pc-windows-msvc"
meson build
cd build
ninja

我的meson.build如下:

project('EtaClient', 'c')
src = ['src/main.c', 'src/linkedlist.c']
executable('EtaClient', src)
target = 'x86_64-pc-windows-msvc'

构建时,出现以下错误(obj 文件已成功构建,但未链接,因此未构建 exe):

LINK : warning LNK4044: unrecognized option '/-subsystem'; ignored
LINK : fatal error LNK1181: cannot open input file 'console.obj'
clang: error: linker command failed with exit code 1181 (use -v to see invocation)

当我查看我的 build.ninja 看看发生了什么时,我发现:

build EtaClient.exe | EtaClient.pdb: c_LINKER EtaClient.exe.p/src_main.c.obj EtaClient.exe.p/src_linkedlist.c.obj
LINK_ARGS = "-Wl,/nologo" "-Wl,/release" "-Wl,/nologo" "-Wl,/DEBUG" "-Wl,/PDB:EtaClient.pdb" "-Wl,--subsystem,console" "-lkernel32" "-luser32" "-lgdi32" "-lwinspool" "-lshell32" "-lole32" "-loleaut32" "-luuid" "-lcomdlg32" "-ladvapi32"

我将 "-Wl,--subsystem,console" 替换为 "-Wl,/subsystem:console",构建成功编译,但每次修改 meson.build.

时我都必须手动进行此编辑

谁能告诉我为什么会这样,以及如何设置介子来生成正确的标志? 提前致谢。

使用 clang-cl 而不是 clang,并在 windows

时省略链接器的定义
set CC=clang-cl
set CFLAGS="--target x86_64-pc-windows-msvc"
meson build
cd build
ninja

https://github.com/mesonbuild/meson/issues/4232