
freeaddrinfo(3) only defined to free one or more addrinfo structures returned by getaddrinfo(3). Thus, it's undefined behaviour for calling freeaddrinfo(3) on nullptr, some libc only call free(3) on the the passed addrinfo, but other libc assumes the addrinfo is always valid. Let's be explicit instead of relying on undefined behaviours. Let's drop one call to freeaddrinfo(3) because the addrinfo there is always nullptr and guard the second.
cppdap
About
cppdap
is a C++11 library ("SDK") implementation of the Debug Adapter Protocol, providing an API for implementing a DAP client or server.
cppdap
provides C++ type-safe structures for the full DAP specification, and provides a simple way to add custom protocol messages.
Fetching dependencies
cppdap
provides CMake build files to build the library, unit tests and examples.
cppdap
depends on the nlohmann/json
library, and the unit tests depend on the googletest
library. Both are referenced as a git submodules.
Before building, fetch the git submodules with:
cd <path-to-cppdap>
git submodule update --init
Alternatively, cppdap
can use the RapidJSON
library or the JsonCpp
library for JSON serialization. Use the CPPDAP_USE_EXTERNAL_NLOHMANN_JSON_PACKAGE
, CPPDAP_USE_EXTERNAL_RAPIDJSON_PACKAGE
, and CPPDAP_USE_EXTERNAL_JSONCPP_PACKAGE
CMake cache variables to select which library to use.
Building
Linux and macOS
Next, generate the build files:
cd <path-to-cppdap>
mkdir build
cd build
cmake ..
You may wish to suffix the cmake ..
line with any of the following flags:
-DCPPDAP_BUILD_TESTS=1
- Builds thecppdap
unit tests-DCPPDAP_BUILD_EXAMPLES=1
- Builds thecppdap
examples-DCPPDAP_INSTALL_VSCODE_EXAMPLES=1
- Installs thecppdap
examples as Visual Studio Code extensions-DCPPDAP_WARNINGS_AS_ERRORS=1
- Treats all compiler warnings as errors.
Finally, build the project:
make
Windows
cppdap
can be built using Visual Studio 2019's CMake integration.
Using cppdap
in your CMake project
You can build and link cppdap
using add_subdirectory()
in your project's CMakeLists.txt
file:
set(CPPDAP_DIR <path-to-cppdap>) # example <path-to-cppdap>: "${CMAKE_CURRENT_SOURCE_DIR}/third_party/cppdap"
add_subdirectory(${CPPDAP_DIR})
This will define the cppdap
library target, which you can pass to target_link_libraries()
:
target_link_libraries(<target> cppdap) # replace <target> with the name of your project's target
You may also wish to specify your own paths to the third party libraries used by cppdap
.
You can do this by setting any of the following variables before the call to add_subdirectory()
:
set(CPPDAP_THIRD_PARTY_DIR <third-party-root-directory>) # defaults to ${CPPDAP_DIR}/third_party
set(CPPDAP_JSON_DIR <path-to-nlohmann-json>) # defaults to ${CPPDAP_THIRD_PARTY_DIR}/json
set(CPPDAP_GOOGLETEST_DIR <path-to-googletest>) # defaults to ${CPPDAP_THIRD_PARTY_DIR}/googletest
add_subdirectory(${CPPDAP_DIR})
Note: This is not an officially supported Google product