I am using Mongodb client and Boost in my C++ applic开发者_运维百科ation. Because the Mongodb client is still using Boost old filesystem and my C++ application is using filesystem version 3 from boost 1.47.0, they conflict.
I found a way to solve this compilation problem, namely add a macro definition before all include statements for the header files from Boost in my cpp files:
#define BOOST_FILESYSTEM_VERSION 2
But I want to know how to put the above macro's definition into my CMake project files.
Take a look at add_definitions, which will add your definitions to your compiler command line, e.g. -D
with gcc, or /D
with MSVC. Try something like:
add_definitions( -DBOOST_FILESYSTEM_VERSION=2 )
In your case, I would definitely go with the add_definition
method, but an alternative may to take a look at configure_file. Then you can create a header-file template, which will be filled with cmake-values and include this in your source files. This can be useful if you have many, many configurable parameters which are determined by CMake.
Since CMake 3 there's target_compile_definitions to set defines for specific target only.
Example:
target_compile_definitions(your_target_name PUBLIC BOOST_FILESYSTEM_VERSION=2)
精彩评论