cross compiling - CMake: Setting correct compiler options for one platform only -
i use cmake generate build files (makefile or project files) across windows, osx , linux, c , c++ compilers native platforms. on windows gnerate vs 2010 project, , in release configuration following error occures:
command line error d8016: '/zi' , '/ob2' command-line options incompatible
clearly, cmake generates optimization , debug information options not compatible. default cmake configuration, not setup special flags.
i fix altering /zi /z7 in project options in visual studio, makes annoying setup continous integration system - need add script modify project file.
can force cmake gnerate /z7 (c7 compatible debug info) instead of /zi?
in addition, how can make generate in release configuration , not in debug?
i don't think cmake applies /zi
release flags default - it's being applied elsewhere in cmakelists.txt or 1 of cmake files included it.
nonetheless, can switch flag doing like:
if(msvc) string(regex replace "/z[ii7]" "" cmake_cxx_flags_release "${cmake_cxx_flags_release}") set(cmake_cxx_flags_release "${cmake_cxx_flags_release} /z7") endif()
the first line strips /zi
, /zi
, /z7
flags if exist in release flags. note use of "
round "${cmake_cxx_flags_release}"
. it's important cmake variable remains single string. if quotes removed, variable becomes semi-colon separated list (i.e. each space replaced semi-colon) , unsuitable passing compiler.
you can give conflicting flags here if want. if removed string(regex replace ...)
command , left set
command, ${cmake_cxx_flags_release}
contain ... /zi ... /z7 ..."
, long /z7
last debug info flag, "wins" , 1 gets applied.
however, tiny amount of effort clean variable first, feel it's worth stripping conflicting flags.
Comments
Post a Comment