我使用 VSCode 和tasks.json 在 macOS 12.7 上构建 C++ 程序。
我花了几个小时尝试配置 VSCodetasks.json 以使用 g++-14 和 g++-13 进行构建。我仍然很困惑为什么我必须将 lua 库的路径从相对于编译的源代码的路径更改为相对于 VSCode 启动目录的路径。
这个 g++-13 调用编译正常:
/usr/local/Cellar/gcc@13/13.3.0/bin/g++-13 -fdiagnostics-color=always -std=c++23 -fsanitize=address,undefined -g -Wl,-v lib/macos/lua-5.2.4_MacOS1011_lib/liblua52.a /Users/kjell-olovhogdal/Documents/Github/cratchit/src/main.cpp -o /Users/kjell-olovhogdal/Documents/Github/cratchit/cratchit.out
这个 g++14 调用编译正常:
/usr/local/Cellar/gcc/14.1.0_1/bin/g++-14 --sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -fdiagnostics-color=always -std=c++23 -g -Wl,-v -fsanitize=address,undefined -fno-omit-frame-pointer ../lib/macos/lua-5.2.4_MacOS1011_lib/liblua52.a /Users/kjell-olovhogdal/Documents/Github/cratchit/src/main.cpp -o /Users/kjell-olovhogdal/Documents/Github/cratchit/cratchit.out
注意 g++-13 调用列出 'lib/macos/lua-5.2.4_MacOS1011_lib/liblua52.a' 而 g++-14 调用列出 '../lib/macos/lua-5.2.4_MacOS1011_lib/liblua52.a '.
安装 g++-13(macOS 12.7 和 Brew)后,我无法使用它编译我的代码。尽管我以与调用 g++14 相同的方式调用 g++-13,但它抱怨找不到 liblua52.a。在尝试了不同的方法来指示 g++-13 与 liblua52.a 链接之后,我发现修复方法是将库的路径更改为相对于 VSCode 的工作目录。但是 g++-14 编译并链接得很好,并且具有相对于编译的源代码文件的库路径。
谁能向我解释一下从 VSCode 构建时可能会导致这种行为的原因是什么?明确地说,什么实际决定了 g++ 编译器如何解释参数列表中列出的文件的相对路径?
提前非常感谢!
/谢尔-奥洛夫
我发现问题了。 VSCode task.json 配置中的 options::cwd 设置不同 sigh!
"options": {
"cwd": "${fileDirname}"
},
与:
"options": {
"cwd": "${workspaceFolder}"
},
发生这种情况是因为我使用 ChatGPT 来帮助我完成 VSCode 配置的所有“神奇”设置,我真的没有时间也没有兴趣去打扰:-/。
嗯...也许是时候回到纯文本编辑器和硬编码构建脚本了:o!