【问题标题】:How to add macro's definition in cmake?如何在cmake中添加宏的定义?
【发布时间】:2011-10-09 21:27:41
【问题描述】:

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

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

#define BOOST_FILESYSTEM_VERSION 2

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

【问题讨论】:

    标签: boost mongodb cmake


    【解决方案1】:

    看看add_definitions,它会将你的定义添加到你的编译器命令行中,例如-D 使用 gcc,或 /D 使用 MSVC。尝试类似:

    add_definitions( -DBOOST_FILESYSTEM_VERSION=2 )
    

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

    【讨论】:

    • 这有助于编译一个无法编译的 C++0x 项目。楼主,厉害了! :D
    • 当值是另一个宏,它有双下划线,比如__FUNCTION__,那么进程应该是什么?
    • ccmake 中是否有任何地方可以指定这些?
    • 看起来这个解决方案是不可移植的。如果我使用第三方编译器,它可能无法识别 -D 选项。
    • @nowox 由于 cmake 3.12 有更清洁的 add_compile_definitions() 可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多