DEV Community

Summer Rizzo
Summer Rizzo

Posted on

6 2

My VSCode / C++ / OpenCV / MacOS Config!

Hey folks!

If any of you have started configuring C++ in VSCode, you may know that it has a potential of being a pain in the ass. Configuring the use of other libraries only adds to that complexity!

I'm a total beginner with C/C++ so it was especially a challenge for me. It took a while before I found the set of configurations that worked with my environment, so I thought I would post mine.

Note: This is not a guide - I'm assuming you have all of the necessary parts installed. This is a good guide to start with the basic config for C/C++ with VSCode on a Mac.

Here's what I'm working with:

  • MacOS Catalinia 10.15.4
  • Homebrew
  • XCode
  • Clang
  • C++ 17
  • OpenCV 4
  • VSCode with C/C++ extensions installed

I used Homebrew to install OpenCV.

Here's my c_cpp_properties.json :

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/local/Cellar/opencv/4.3.0/include/opencv4/**",
                "/usr/local/Cellar/opencv/4.3.0/lib"
            ],
            "defines": [],
            "macFrameworkPath":  [
                "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
              ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

My tasks.json :

{
    "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "clang++ build active file",
      "command": "/usr/bin/clang++",
      "args": [
        "-std=c++17",
        "-stdlib=libc++",
        "-g",
        "${workspaceFolder}/*.cpp",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}",
        "-I/usr/local/Cellar/opencv/4.3.0/include/opencv4/**",
        "-I/usr/local/Cellar/opencv/4.3.0/include/opencv4",
        "-L/usr/local/Cellar/opencv/4.3.0",
        "-lopencv_highgui",
        "-lopencv_core", 
        "-lopencv_imgcodecs", 
        "-lopencv_imgproc", 
        "-lopencv_photo"
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
    ]
}

As a note, everything after "-L/usr/local/Cellar/opencv/4.3.0", in args is specific to which OpenCV libraries I'm including.

And my launch.json :

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(lldb) Launch",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/loopi.out",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "lldb"
    }
  ]
}

loopi is the name of my program.

I run the build task with Terminal > Run Build Task and in my terminal I run ./loopi with any other command line args needed (for instance, in my program takes a path to an image file - this is specific to your program and not the build task).

There ya go! Hope it saves someone some headaches and time.

I'm a beginner, so if anyone sees something uneccessary or awry, please do let me know!

With <3, happy coding!

Image of Quadratic

AI, code, and data connections in a familiar spreadsheet UI

Simplify data analysis by connecting directly to your database or API, writing code, and using the latest LLMs.

Try Quadratic free

Top comments (1)

Collapse
 
joymaker profile image
Joymaker

This also worked for me using MacPorts instead of Homebrew, if I change
/usr/local/Cellar/opencv/4.3.0
to
/opt/local/include/opencv4
universally.

(I won't use homebrew because it makes a total mess of the ownership and permissions of the directories it installs under macOS.)

Sentry image

Make it make sense

Only the context you need to fix your broken code with Sentry.

Start debugging →

👋 Kindness is contagious

Dive into this informative piece, backed by our vibrant DEV Community

Whether you’re a novice or a pro, your perspective enriches our collective insight.

A simple “thank you” can lift someone’s spirits—share your gratitude in the comments!

On DEV, the power of shared knowledge paves a smoother path and tightens our community ties. Found value here? A quick thanks to the author makes a big impact.

Okay