[CMake] Selecting /Ox when compiling with VisualC++

David Cole david.cole at kitware.com
Thu Oct 13 10:35:07 EDT 2011


As this grep from a Visual Studio build tree shows, the variables
containing "/O" compiler flags are the configuration-specific
variables:

$ grep "/O" CMakeCache.txt
CMAKE_CXX_FLAGS_DEBUG:STRING=/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=/MD /O1 /Ob1 /D NDEBUG
CMAKE_CXX_FLAGS_RELEASE:STRING=/MD /O2 /Ob2 /D NDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=/MD /Zi /O2 /Ob1 /D NDEBUG
CMAKE_C_FLAGS_DEBUG:STRING=/D_DEBUG /MDd /Zi  /Ob0 /Od /RTC1
CMAKE_C_FLAGS_MINSIZEREL:STRING=/MD /O1 /Ob1 /D NDEBUG
CMAKE_C_FLAGS_RELEASE:STRING=/MD /O2 /Ob2 /D NDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=/MD /Zi /O2 /Ob1 /D NDEBUG

Rather than setting CMAKE_CXX_FLAGS and CMAKE_C_FLAGS as you tried,
use string REPLACE instead to get rid of the specific /O args that
you're trying to replace:

  string(REPLACE "/O2" "/Ox" CMAKE_CXX_FLAGS_RELEASE
"${CMAKE_CXX_FLAGS_RELEASE}")

Repeat as necessary with other variables and other /O values...


2011/10/13 Radio młodych bandytów <radiomlodychbandytow at o2.pl>:
> I have code like below:
> IF(MSVC)
>    set(CMAKE_CXX_FLAGS /Ox)
>    set(CMAKE_C_FLAGS   /Ox)
> ENDIF(MSVC)
>
> However, the flag is ignored and CMake generates projects that use /O2.
> How can I fix it?
>
> --
> Twoje radio
>
> --
>
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>


More information about the CMake mailing list