提问人:Nikolas Rian 提问时间:10/3/2023 更新时间:10/5/2023 访问量:84
如何配置,这样您就不必在 vscode 的 c 中键入标头的整个路径
How to configure so that you don't have to type the entire path to headers in c in vscode
问:
我正在使用 vscode 进行测试,以查看它在 c 中编辑代码的能力。我在配置标头路径时遇到了一个问题,为了方便标头导入,因为我将它们放在单独的文件夹中进行组织,因此我配置了 Microsoft C/C++ 扩展以将包含文件夹添加为标头的路径,但似乎不起作用
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c23",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-x64",
"browse": {
"path": [
"${workspaceFolder}/include",
"${workspaceFolder}/src"
],
"limitSymbolsToIncludedHeaders": false,
"databaseFilename": ""
}
}
],
"version": 4
}
这是创建c_cpp_properties文件,但它似乎没有执行任何操作。
我仍然收到这个错误:
Iniciando o build...
/usr/bin/gcc -fdiagnostics-color=always -g /home/user/Codes/C/TestProject/src/*.c -o /home/user/Codes/C/TestProject/src/../output/Main
/home/user/Codes/C/TestProject/src/Main.c:2:10: fatal error: List.h: No such file or directory
2 | #include "List.h"
| ^~~~~~~~
compilation terminated.
Build concluída com erro(s).
答:
注意
这个答案主要是从我自己对另一个问题的回答中复制的:第一次用 C 语言编译时 VSCode 中的错误
c_cpp_properties.json
c_cpp_properties.json
VSCode 用于为 Intellisense 提供信息
它需要做一些事情,比如查看文档、查找编译错误和
自动完成。它对实际编译没有影响。
使用 GCC 编译
如果你只有一个 main.c,那么你可以直接将它传递给 GCC,它 将编译不问任何问题。
gcc ./main.c -o program.exe
如果要调试它,则还要告诉GCC使用或添加调试符号,如果要设置优化级别,则传递以下,,或。-g
-g3
-O0
-O1
-O3
如果文件夹中有其他文件,其结构如下:
project
|
|- library_1
| |
| |- library_1.h
| |- library_1.c
|
|- main.c
你可以将这样的东西传递给 GCC。
gcc main.c -I ./my_header library_1/library_1.c -o program.exe
它会编译。但随着文件数量的增加,此命令将 变得非常大,每次在终端上输入它是不切实际的 时间。
使用 CMake
如果你有很多文件,你可以使用 CMake 来管理构建和传递 自动将东西发送到 GCC。一个简单的 CMakeLists.txt 类似于 这。
# Tell CMake about your project name and version etc
cmake_minimum_required(VERSION 3.19)
set(PROJECT_NAME "your_project")
project(${PROJECT_NAME} VERSION 0.1 LANGUAGES C CXX)
# Add your executable and attach it to main.c
add_executable(${PROJECT_NAME} main.c)
# Add your library folders
add_subdirectory(library_1)
add_subdirectory(library_2)
add_subdirectory(library_3)
add_subdirectory(library_4)
但请记住,每个库文件夹也会有一个 CMakeLists.txt。 就我个人而言,我喜欢用库名称制作一个文件夹,制作一个 .c 和 .h 文件 同名。喜欢这个。
library_1
|- library_1.h
|- library_1.c
|- CMakeLists.txt
然后把它放在 cmake 中。library_1
get_filename_component(CURRENT_DIR_NAME ${CMAKE_CURRENT_LIST_DIR} NAME)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${CURRENT_DIR_NAME}.c)
target_include_directories(${PROJECT_NAME} PRIVATE .)
它会自动选取库名称以及 .c 和 .h 文件名,因此 只需将其复制粘贴到您的所有库中即可。
然后你可以像这样构建
cmake -G Ninja -B build
ninja -C build
它会将可执行文件放在文件夹中。build
VSCode 扩展
我正在开发一个 VSCode 扩展,它可以为您完成所有这些步骤,并且 创建预配置的 CMake 项目。它还提供用于清洁的按钮, 构建、运行、调试和测试这些项目,这样您就不必这样做了 一次又一次地处理终端。它还会检查缺少的构建 工具,因此用户不必处理安装和配置。
我称之为 C 工具包。
顾名思义,它只用 C 语言创建预配置项目,而不是 C++。 但是您可以创建项目并重命名文件,它可能会起作用 想。Lemme 知道您是否决定使用它以及它是否解决了您的问题。
评论
c_cpp_properties
编译时不使用,在编译任务中添加参数-I