Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add macro's definition in cmake?

I am using Mongodb client and Boost in my C++ application. 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.

like image 834
Dean Chen Avatar asked Jul 21 '11 03:07

Dean Chen


People also ask

How do I specify in CMake?

You can use the command line to set entries in the Cache with the syntax cmake -D var:type=value , just cmake -D var=value or with cmake -C CMakeInitialCache. cmake .

What are preprocessor definitions?

In computer science, a preprocessor (or precompiler) is a program that processes its input data to produce output that is used as input to another program. The output is said to be a preprocessed form of the input data, which is often used by some subsequent programs like compilers.


1 Answers

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.

like image 111
André Avatar answered Sep 28 '22 04:09

André