CMake:使用 -D(命令行)比 add_compile_definitions 或 target_compile_definitions 或设置有什么优势?

CMake: What is the advantage of using -D (command line) over add_compile_definitions or target_compile_definitions or set?

CMake 新手。添加库时,我看到很多说明都说这样做:

cmake -D OPENSSL_ROOT_DIR=/usr/local/opt/openssl

为什么将其放在实际 CMakeLists.txt 中更受欢迎? 例如

set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl")
  • 您不将第一个提交到存储库,而您要么提交第二个,要么必须小心不要将其与其他内容一起提交。
  • 第二种方法通常用于允许某个项目的用户修改该项目的某些方面。因此,与项目本身有关的任何内容(不可自定义)都会直接进入 CMake 文件,其他所有内容都可以从命令行提供。

另请注意,CMake presets 添加了在 CMake 文件之外自定义构建的功能,因此我希望通过控制台调用直接提供变量的方法会消失并被替换为预设。但它们的工作方式仍然相同:预设中定义的变量通过生成的控制台调用进入 CMake 缓存(使用 IDE 可能会有所不同)。