[CMake] IF(DEFINED) syntax

David Cole david.cole at kitware.com
Thu Dec 7 05:48:39 EST 2006


CMAKE_BUILD_TYPE is automatically set to a default initial value by CMake in
most cases before it gets to your IF(NOT DEFINED... (So, it's "always"
defined -- in your case.)

It is conditionally set from different cmake scripts that are run based on
generator and compiler chosen. It is not set at all when using a Visual
Studio or Xcode generator, for example, so you can build any configuration
from the build environment's UI.

So... if you want others to be able to use Visual Studio or Xcode generators
on your project, it's best to avoid assumptions about CMAKE_BUILD_TYPE in
your CMakeLists files. If it's set, you can use it's value. If it's not set,
then the target environment probably supports multiple configurations
selectable at build time by the developer. You can also poke around for
examples dealing with variables CMAKE_CONFIGURATION_TYPES and
CMAKE_CFG_INTDIR for supporting multiple configuration build systems at
CMake configure time...


HTH,
David Cole


On 12/6/06, David Blado <dblado at decarta.com> wrote:
>
>  Hi,
>
>
>
> I'm trying to setup a cmake system where as cmake <directory> will by
> default be a release build.  If someone issues cmake
> –DCMAKE_BUILD_TYPE:STRING=debug it should overwrite the default to produce a
> debug build.
>
>
>
> The only way I've found to do this is with:
>
>
>
>   IF(CMAKE_BUILD_TYPE MATCHES "debug")
>
>     SET(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE})
>
>   ELSE(CMAKE_BUILD_TYPE MATCHES "debug")
>
>     SET(CMAKE_BUILD_TYPE "release")
>
>   ENDIF(CMAKE_BUILD_TYPE MATCHES "debug")
>
>
>
> I would have thought that the following should work:
>
>
>
> IF(NOT DEFINED CMAKE_BUILD_TYPE)
>
>    SET(CMAKE_BUILD_TYPE "release")
>
> ENDIF(NOT DEFINED CMAKE_BUILD_TYPE)
>
>
>
> Obviously this is preferred since it is fewer lines and executes just a
> tiny bit faster J
>
>
>
> Anyone have any ideas as to why only the former works?
>
>
>
> Cheers,
>
> David
>
>
>
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/cmake/attachments/20061207/ed297d9f/attachment-0001.htm


More information about the CMake mailing list