如何在 Visual Studio Code 中包含编译器标志? 您所在的位置:网站首页 vscode编译php 如何在 Visual Studio Code 中包含编译器标志?

如何在 Visual Studio Code 中包含编译器标志?

2023-03-14 18:15| 来源: 网络整理| 查看: 265

本文介绍了如何在 Visual Studio Code 中包含编译器标志?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个程序,我试图在使用 fftw 函数的 Visual Studio Code 调试器中运行该程序.它用命令编译

I have a program that I am trying to run in the Visual Studio Code debugger that uses fftw functions. It compiles with the command

g++ dimer.cpp -std=c++11 -lfftw3

在我电脑上的终端上,没有抱怨未定义的引用.但是,在生成 launch.json 文件后,我的程序会抱怨 fftw 库函数和 -std=c++14 编译器标志.

on the terminal on my computer without complaining about undefined references. However, after generating a launch.json file, my program complains about fftw library functions and about the -std=c++14 compiler flag.

我相信它只需要 -std=c++11 和 -lfftw3 的额外标志使 Visual Studio Code 中的调试器正常工作.我正在使用 Microsoft 的 C/C++ 扩展和 Code Runner 扩展.

I believe that it needs just the extra flags of -std=c++11 and -lfftw3 for the debugger in Visual Studio Code to work. I am using Microsoft's C/C++ extension and the Code Runner extension.

我正在尝试将 Mathematica 代码文档转换为 C++.

I am trying to transform a Mathematica document of code into c++.

以下是我从输出中得到的错误.

Below are the errors I get from the output.

Executing task: /usr/bin/g++ -g /home/msammartino/Documents/twochain/dimer.cpp -o /home/msammartino/Documents/twochain/dimer armadillo:54:0, from /home/msammartino/Documents/twochain/dimer.cpp:6: /usr/include/armadillo_bits/compiler_setup.hpp:530:108: note: #pragma message: NOTE: suggest to enable C++14 mode for faster code; add -std=c++14 to compiler flags #pragma message ("NOTE: suggest to enable C++14 mode for faster code; add -std=c++14 to compiler flags") ^ /tmp/ccgb7Xsv.o: In function `r2r_dsine_fftw_forward_dimer(int, double*, double*, Eigen::Matrix (&) [2048], Eigen::Matrix (&) [2048])': /home/msammartino/Documents/twochain/dimer.cpp:99: undefined reference to `fftw_plan_r2r_1d' /home/msammartino/Documents/twochain/dimer.cpp:100: undefined reference to `fftw_plan_r2r_1d' /home/msammartino/Documents/twochain/dimer.cpp:101: undefined reference to `fftw_plan_r2r_1d' /home/msammartino/Documents/twochain/dimer.cpp:102: undefined reference to `fftw_plan_r2r_1d' /home/msammartino/Documents/twochain/dimer.cpp:103: undefined reference to `fftw_execute' /home/msammartino/Documents/twochain/dimer.cpp:104: undefined reference to `fftw_execute' /home/msammartino/Documents/twochain/dimer.cpp:105: undefined reference to `fftw_execute' /home/msammartino/Documents/twochain/dimer.cpp:106: undefined reference to `fftw_execute' /tmp/ccgb7Xsv.o: In function `r2r_dsine_fftw_backward_dimer(int, double*, double*, Eigen::Matrix (&) [2048], Eigen::Matrix (&) [2048])': /home/msammartino/Documents/twochain/dimer.cpp:166: undefined reference to `fftw_plan_r2r_1d' /home/msammartino/Documents/twochain/dimer.cpp:167: undefined reference to `fftw_plan_r2r_1d' /home/msammartino/Documents/twochain/dimer.cpp:168: undefined reference to `fftw_plan_r2r_1d' /home/msammartino/Documents/twochain/dimer.cpp:169: undefined reference to `fftw_plan_r2r_1d' /home/msammartino/Documents/twochain/dimer.cpp:170: undefined reference to `fftw_execute' /home/msammartino/Documents/twochain/dimer.cpp:171: undefined reference to `fftw_execute' /home/msammartino/Documents/twochain/dimer.cpp:172: undefined reference to `fftw_execute' /home/msammartino/Documents/twochain/dimer.cpp:173: undefined reference to `fftw_execute' collect2: error: ld returned 1 exit status The terminal process terminated with exit code: 1 Terminal will be reused by tasks, press any key to close it.

如果我提出这个问题的方式有任何问题,请告诉我.

Please let me know about any problems with the way I have asked this question.

推荐答案

简单的选择是 在 tasks.json 配置中将它们作为 args 传递:

The easy option is to pass them as args in your tasks.json configuration:

{ "version": "2.0.0", "tasks": [ { "label": "build-all", "type": "shell", "args": [ "-std=c++11", "-lfftw3", "-L", "/path/to/libs", "/path/to/file.cpp" ], "command": "g++", } ] }

更易于维护和共享的选项是创建一个 Makefile 并将它们全部设置在那里:

The more maintainable, shareable option is to create a Makefile and set them all there:

# Specify compiler to be used CXX = g++ CXXFLAGS += -g -std=c++11 -fPIC -march=x86-64 # Specify paths to headers INCLUDES += -I include # Specify paths to the libraries LDFLAGS += -L /path/to/libs # Specify the link libraries LLIBS += -lfftw3 # ... add other configs ... $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(OBJ_DIR) $(CXX) -c $(CXXFLAGS) $(INCLUDES) $

然后在您的任务配置中,只需调用make:

Then in your task configuration, just call make:

{ "version": "2.0.0", "tasks": [ { "label": "build-all", "type": "shell", "options": { "cwd": "${workspaceFolder}", "env": { ... } }, "command": "make -f Makefile.x86_64", } ] }

如果你有依赖于 env 的路径,你可以在你的 Makefile 中指定一个变量(例如 MY_LIBS),然后在任务配置的 env 块中设置它们(例如,MY_LIBS":/path/to/libs").

If you have env-dependent paths, you can specify a variable in your Makefile (ex. MY_LIBS) and then set them in the env block of the task configuration (ex. "MY_LIBS": "/path/to/libs").

Makefile 选项的优点在于:

The advantage of the Makefile option is that:

不使用 VS Code 的人仍然可以编译您的代码(从控制台或其他 IDE). 如果您使用的是 CI/CD 管道,则不需要单独的配置.您可以使用相同的 Makefile 使用 VS Code 在本地进行构建,也可以使用 CI/CD 进行构建. 您可以将 Makefile 提交到存储库,然后只需在本地 tasks.json 配置中使用环境变量来指定特定于环境的设置.

这篇关于如何在 Visual Studio Code 中包含编译器标志?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持吉威生活!

[英文标题]How to include compiler flags in Visual Studio Code?

声明:本媒体部分图片、文章来源于网络,版权归原作者所有,如有侵权,请联系QQ:330946442删除。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有