Issue
I try to set a preprocessor macro in the command line of CMake. I've tried:
set generator="Visual Studio 8 2005"
set params=-D MY_MACRO=1
cmake.exe -G %generator% %params% ..\some_project
but it's neither defined when I compile nor can I find the name MY_MACRO
in the files generated by CMake at all, except for CMakeCache.txt
where it's present in the form:
MY_MACRO:UNINITIALIZED=1
How can I do it?
Solution
The motivation behind the question was to batch build 3rd party libraries, which is why I wanted to avoid modifying CMakeLists. So years later, even though I don't need that anymore, I figured out that it's easily achievable by means external to CMake:
Invoke CMake as usual, no special flags.
Then:
With MSVC: The compiler reads the
CL
environment variable to get extra command line arguments. Soset CL=/DMY_MACRO=1 %CL%
then invoke MSBuild to do its job.
With Makefiles: The generated makefiles use the
CFLAGS
andCXX_FLAGS
variables as makefiles are expected to do. So the build can be started bymake CXX_FLAGS=-DMY_MACRO=1
or by setting the corresponding environment variables.
Answered By - Yakov Galka Answer Checked By - Clifford M. (WPSolving Volunteer)