{"id":25084,"library":"cmake-harden","title":"cmake-harden","description":"A CMake module that applies compiler hardening options based on OpenSSF guidelines for C and C++ projects. Current stable version is 1.1.2, released with low cadence. It differs from other hardening approaches by being a simple, dependency-free module installable via npm, integrating seamlessly with Node.js CMake projects. It supports hardening both C and C++ targets with optional RUNTIME flags.","status":"active","version":"1.1.2","language":"javascript","source_language":"en","source_url":"https://github.com/holepunchto/cmake-harden","tags":["javascript"],"install":[{"cmd":"npm install cmake-harden","lang":"bash","label":"npm"},{"cmd":"yarn add cmake-harden","lang":"bash","label":"yarn"},{"cmd":"pnpm add cmake-harden","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"Requires find_package with PATHS node_modules/cmake-harden if installed via npm. The harden macro is defined after inclusion.","wrong":"find_package(cmake-harden) or include(cmake-harden) without find_package path","symbol":"harden","correct":"include(cmake-harden)\nharden(my_target CXX RUNTIME)"},{"note":"The module is not installed system-wide; must specify path to node_modules.","wrong":"find_package(cmake-harden) without PATHS","symbol":"find_package(cmake-harden)","correct":"find_package(cmake-harden REQUIRED PATHS node_modules/cmake-harden)"},{"note":"If using include directly, the file path must be correct after find_package resolves the location.","wrong":"include(cmake-harden) without full path or with find_package","symbol":"include(cmake-harden)","correct":"include(cmake-harden/cmake-harden.cmake)"}],"quickstart":{"code":"find_package(cmake-harden REQUIRED PATHS node_modules/cmake-harden)\nadd_executable(myapp main.c)\nharden(myapp C)\ntarget_compile_options(myapp PRIVATE -Wall -Wextra)","lang":"javascript","description":"Shows how to include the cmake-harden module and apply hardening to a C executable target."},"warnings":[{"fix":"Use find_package(cmake-harden REQUIRED PATHS node_modules/cmake-harden)","message":"find_package must specify PATHS to node_modules when installed via npm","severity":"gotcha","affected_versions":"*"},{"fix":"Call harden() on each target you want to harden","message":"The module does not set CMAKE_CXX_FLAGS or CMAKE_C_FLAGS globally; it applies to specific targets","severity":"gotcha","affected_versions":"*"},{"fix":"Use harden(target CXX RUNTIME) to also add runtime flags","message":"The RUNTIME argument only adds runtime hardening flags (e.g., -D_FORTIFY_SOURCE=2), not compile-time","severity":"gotcha","affected_versions":"*"},{"fix":"","message":"No deprecated features known","severity":"deprecated","affected_versions":""}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Ensure npm install cmake-harden is run, then add PATHS node_modules/cmake-harden to find_package","cause":"Missing PATHS argument or cmake-harden not installed","error":"CMake Error at CMakeLists.txt:1 (find_package):\n  By not providing \"Findcmake-harden.cmake\" in CMAKE_MODULE_PATH this project\n  has asked CMake to find a package configuration file provided by\n  \"cmake-harden\", but CMake did not find one."},{"fix":"Add include(cmake-harden/cmake-harden.cmake) or use find_package and then include the module file","cause":"Module not included before calling harden()","error":"CMake Error at CMakeLists.txt:5 (harden):\n  Unknown CMake command \"harden\"."},{"fix":"Ensure cmake is available in the system or project (not an npm issue)","cause":"cmake is not listed as a peer dependency but npm may warn","error":"npm WARN cmake-harden@1.1.2 requires a peer of cmake but none is installed."}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}