如何在cmake中添加宏的定义?

Dea*_*hen 33 boost cmake mongodb

我在我的C++应用程序中使用Mongodb客户端和Boost.因为Mongodb客户端仍在使用Boost旧文件系统,而我的C++应用程序正在使用boost 1.47.0中的文件系统版本3,所以它们会发生冲突.

我找到了解决这个编译问题的方法,即在我的cpp文件中来自Boost的头文件的所有include语句之前添加一个宏定义:

#define BOOST_FILESYSTEM_VERSION 2
Run Code Online (Sandbox Code Playgroud)

但我想知道如何将上面的宏定义放入我的CMake项目文件中.

And*_*dré 53

查看add_definitions,它将您的定义添加到编译器命令行,例如-D使用gcc或/DMSVC.尝试类似的东西:

add_definitions( -DBOOST_FILESYSTEM_VERSION=2 )
Run Code Online (Sandbox Code Playgroud)

在你的情况下,我肯定会使用该add_definition方法,但另一种方法可能是看看configure_file.然后,您可以创建一个头文件模板,该模板将填充cmake-values并将其包含在源文件中.如果您有许多由CMake确定的可配置参数,这将非常有用.

  • 看起来这个解决方案不可移植。如果我使用第三方编译器,它可能无法识别 `-D` 选项。 (3认同)
  • @nowox 从 cmake 3.12 开始,有更清晰的 [`add_compile_definitions()`](https://cmake.org/cmake/help/v3.12/command/add_compile_definitions.html#command:add_compile_definitions) 可用。 (2认同)

dim*_*4eg 7

从 CMake 3 开始,有target_compile_definitions来仅为特定目标设置定义。

例子:

target_compile_definitions(your_target_name PUBLIC BOOST_FILESYSTEM_VERSION=2)
Run Code Online (Sandbox Code Playgroud)