CMAKE 加入編譯選項 add_definitions 定義巨集

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

CMake中的add_definitions和add_compile_definitions用于定义编译时宏。add_definitions在CMake 3.11及之前版本使用,但不推荐;add_compile_definitions在CMake 3.12及之后版本推荐使用。通过设置c_cpp_properties.json,VS Code可以识别头文件并高亮有效代码。示例中,定义宏HELLO后,编译时会输出特定内容。

🎯

关键要点

  • add_definitions 和 add_compile_definitions 用於定義編譯時期巨集,但在不同版本的 CMake 中使用。
  • add_definitions 在 CMake 3.11 及之前版本中使用,但不推薦,因為會影響整個專案的所有目標。
  • add_compile_definitions 在 CMake 3.12 及之後版本中推薦使用,這個指令更加直觀且符合現代寫法。
  • 設定 c_cpp_properties.json 可以讓 VS Code 辨識連結的標頭檔,避免出現紅色波浪。
  • 透過 cmake toolchain 生成的 compile_commands.json 檔案中記載了編譯資訊,VS Code 可以自動偵測並高亮顯示有效的程式碼區塊。
  • 範例中,若定義了 HELLO,則編譯器會執行 #ifdef 到 #endif 之間的程式碼,並在執行時輸出特定內容。

延伸问答

CMake中如何定义编译时宏?

可以使用add_definitions或add_compile_definitions指令来定义编译时宏。

add_definitions和add_compile_definitions有什么区别?

add_definitions在CMake 3.11及之前版本使用,但不推荐;add_compile_definitions在CMake 3.12及之后版本推荐使用,且更直观。

如何在VS Code中设置以识别头文件?

需要在c_cpp_properties.json中添加includePath指定路径,以避免出现红色波浪。

如何使用CMake编译时宏的示例?

在CMakeLists.txt中使用add_definitions定义宏HELLO,然后在main.cpp中使用#ifdef来判断是否定义了该宏。

为什么不推荐使用add_definitions?

因为add_definitions会影响整个项目的所有目标,而不仅仅是特定目标。

如何让VS Code自动高亮显示有效代码?

通过cmake toolchain生成的compile_commands.json文件,VS Code可以自动检测并高亮显示有效的代码块。

➡️

继续阅读