我正在尝试在macOS上使用clang++构建带有多个* .cpp文件的简单项目。
task.json:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "clang++ build active file",
"command": "/usr/bin/clang++",
"args": [
"-std=c++17",
"-Wall",
"-Wextra",
"-Weffc++",
"-Wconversion",
"-pedantic-errors",
"-stdlib=libc++",
"-g",
"${workspaceFolder}/*.cpp",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
结果命令如下所示:
/usr/bin/clang++ -std=c++17 -Wall -Wextra -Weffc++ -Wconversion -pedantic-errors -stdlib=libc++ -g '/Users/USER/Developer/WORKINGDIR/Lesson 2/Lesson 2.8/*.cpp' -o '/Users/USER/Developer/WORKINGDIR/Lesson 2/Lesson 2.8/main'
但是编译器抛出错误:
clang: error: no such file or directory: '/Users/USER/Developer/WORKINGDIR/Lesson 2/Lesson 2.8/*.cpp'
但是,如果我更改从中指向文件的字符串:
'/Users/USER/Developer/WORKINGDIR/Lesson 2/Lesson 2.8/*.cpp'
对此(不带引号,并添加“\”):
/Users/USER/Developer/WORKINGDIR/Lesson\ 2/Lesson\ 2.8/*.cpp
一切都编译良好。
但是,如何在tasks.json中配置相同的字符串?还是应该在那里更改使其正常工作?
最佳答案
不要使tasks.json
复杂化。最好使用诸如CMake之类的东西来处理所有这些配置(C++版本,编译标志和警告等),并仅调用make
(或ninja
或您使用CMake选择的任何其他生成器)。
然后在tasks.json
中,“选项”中的“cwd”值将指向构建文件夹(运行CMake命令的文件夹)而不是源文件夹,“args”将是CMake中目标的名称(或如果要构建所有目标,则为空),“command”将是诸如“/ usr / bin / ninja”或“/ usr / bin / make”之类的内容,具体取决于您在CMake中选择的生成器。
这还具有一个优点,即不管其他人是谁,其他人都可以从中受益(或为您创建)。
您正在使用的标志的CMakeLists.txt
文件可能类似于
project(TheProjectName)
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
add_compile_options(-Wall)
add_compile_options(-Wextra)
add_compile_options(-pedantic-errors)
add_compile_options(-Weffc++)
add_compile_options(-Wconversion)
add_compile_options(-stdlib=libc++)
# This is the executable target "main" is the name of the executable
# and you can change to something else
add_executable(main main.cpp
other_file.h
other_file.cpp
some_other_file.h
some_other_file.cpp
)
-g
中未设置用于指定调试版本的CMakeLists.txt
选项。相反,当您运行cmake
时,请将其构建类型设置为Debug
。要使用此
CMakeLists.txt
文件,请在工作空间文件夹中创建一个build
文件夹,然后在终端中转到该文件夹。然后运行命令cmake .. -DCMAKE_BUILD_TYPE=Debug
一次。之后,您可以仅使用make
文件夹中的build
编译项目。在tasks.json
中进行设置只是将“cwd”设置为指向${workspaceFolder}/build
,并将命令设置为/usr/bin/make
。最后要注意的是,如果同时安装了clang和gcc,则在运行
cmake
时,可能会使用gcc而不是clang。为了专门针对clang,请运行cmake
命令,指定CXX和CC环境变量以指向clang。也就是说,cmake命令应运行(一次从build文件夹),如下所示:CXX=clang++ CC=clang cmake .. -DCMAKE_BUILD_TYPE=Debug
关于c++ - 在macOS上使用clang++在Visual Studio Code中编译多个.cpp文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61876249/