簡體   English   中英

如何使用 vscode 編譯具有不同選項的 c 語言?

[英]How to compile c language with different options with vscode?

一些 c 語言代碼使用動態庫,所以我需要使用-ldm選項。 有些包括其他 static 庫,需要使用-I來指定目錄。 但是在vscode中,常見的配置直接是gcc sourcefile -o targetfile ,所以不能正常執行? 有沒有辦法讓vscode按照Makefile執行? 而這樣的設置在我使用SSH 將服務器上的文件夾添加到工作區時可以自動使用這種方法,而不必每次都重新配置?

實際上, makelinuxmsbuild.exe上的 msbuild.exe 上使用windows 您也可以在其中擁有不同的配置,以便擁有Debug構建或Release構建。 您需要做的就是在tasks.json中定義合適的任務。 例如,考慮:

        {
            "label": "lindbgbuild",
            "type": "shell",
            "command": "make",
            "args": [
                "CONF=Debug",
                "-C",
                "./.vscode"
            ],
            "group": "build",
            "problemMatcher": []
        },
        {
            "label": "linreleasebuild",
            "type": "shell",
            "command": "make",
            "args": [
                "CONF=Release",
                "-C",
                "./.vscode"
            ],
            "group": "build"
        },
        {
            "label": "winbuilddebug",
            "type": "shell",
            "command": "msbuild",
            "args": [
                ".vscode/windows.vcxproj",
                "/property:GenerateFullPaths=true",
                "/property:Configuration=Debug",
                "/property:Platform=x64",
                "/t:build",
                "/consoleloggerparameters:NoSummary"
            ],
            "group": "build",
            "presentation": {
                "reveal": "silent"
            },
            "problemMatcher": "$msCompile"
        },
        {
            "label": "winbuildrelease",
            "type": "shell",
            "command": "msbuild",
            "args": [
                ".vscode/windows.vcxproj",
                "/property:GenerateFullPaths=true",
                "/property:Configuration=Release",
                "/property:Platform=x64",
                "/t:build",
                "/consoleloggerparameters:NoSummary"
            ],
            "group": "build",
            "presentation": {
                "reveal": "silent"
            },
            "problemMatcher": "$msCompile"
        }

tasks.json中有 4 個任務。 反過來,它們是:

lindbgbuild執行命令make CONF=Debug -C./.vscode

此命令假定當前(項目)目錄的./.vscode子目錄中存在Makefile 然后,它在其中執行Debug配置。 接下來, linreleasebuildRelease配置執行相同的操作。 所以,我們已經完成的是我們可以運行一個抽象命令make然后這個命令將調用Makefile中指定的適當配置。 所有命令,如g++ -c -o -g -I等,都可以在 VSCode之外的一個單獨的 makefile 中配置,VSCode 只調用它。

然后,您有一個任務winbuilddebug 這假定./.vscode中存在.vcxproj項目配置文件。 然后它使用提供的選項執行適當的配置(在這種情況下,配置是Debug on x64 )。 同樣, winbuildrelease下的Release配置的winbuildrelease。 .vcxproj is automatically generated by Visual Studio IDE and makefiles on linux can be created by getting the project built using an IDE such as Netbeans . 或者,您可以從其他預先存在的項目中修改預先存在的 makefiles/.vcxproj 以適應您當前的項目。 (我建議不要這樣做,並使用 IDE 進行初始構建,因為這會自動執行許多設置而不會出錯。)

有了這個給定tasks.json ,你如何訪問這些任務? 在點擊 CtrlShiftB 時,它會打開CtrlShiftB Select Build Tasks to Run對話框,您可以在其中根據您所在的操作系統/平台/編譯器選擇要運行的任務。

有沒有辦法自動執行此步驟並啟動? 實際上,以下是launch.json的示例。 考慮以下配置:

        {
            "name": "(Windows)RelLaunch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": ".vscode/x64/Release/windows.exe",
            "args": [],
            "preLaunchTask": "winbuildrelease",
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "internalConsoleOptions": "openOnSessionStart",
        }

這將build然后啟動應用程序(假設沒有構建錯誤)。 它選擇哪種構建配置? 它將選擇已指定的winbuildrelease配置。 像這樣,如果你在調試並且想要單步調試代碼,你會有不同的配置。

您如何選擇要啟動的配置? 點擊CtrlShiftD 這將打開Run側邊欄,在頂部,您可以從您在launch.json中指定的配置中進行選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM