[CMake] CMAKE_CONFIGURATION_TYPES -- still in use? How to use?

William A. Hoffman billlist at nycap.rr.com
Tue Jan 17 09:10:28 EST 2006


At 03:55 AM 1/17/2006, Zachary Pincus wrote:
>Hi Folks,
>
>Is the CMAKE_CONFIGURATION_TYPES flag and the associated logic still  
>in use, or has it been deprecated in favor of some other build-type- selection mechanism? I can find precious little information about  
>this online.
>
>I'm working on a cmake-driven project which I would like to be as  
>general as possible. There are some mentions in the existing  
>CMakeLists code of CMAKE_CONFIGURATION_TYPES and CMAKE_CFG_INTDIR,  
>but I can't tell if these are relics or codepaths that would still be  
>actively used under certain circumstances.
>
>If this mechanism is used, could someone answer some questions about  
>how to formulate a CMakeLists to make use of it? Specifically, I can  
>imagine two possible ways this variable could be used by CMake:
>
>(1) The CMakeLists must manually loop over each configuration in  
>CMAKE_CONFIGURATION_TYPES to do some manual file additions or whatnot.
>Sample usage under this model:
>    FOREACH(config ${CMAKE_CONFIGURATION_TYPES})
>      SET(FOO "${BINARY_DIR}/${config}")
>      CONFIGURE_FILE(${FILE} ${OUTFILE} IMMEDIATE)
>    ENDFOREACH(config)
>
>(2) CMake implicitly re-runs the CMakeLists for each separate  
>configuration type, setting CMAKE_CFG_INTDIR differently for each.
>E.g.:
>    SET(FOO "${BINARY_DIR}/${CMAKE_CFG_INTDIR}")
>    CONFIGURE_FILE(${FILE} ${OUTFILE} IMMEDIATE)
>and that code will get run by CMake one time for each configuration  
>type.
>
>Are either of these really the case? If CMAKE_CONFIGURATION_TYPES  
>should still be used, in what manner should they be handled?



Yes, they are still in use.

For build tools that support configuration types, CMAKE_CONFIGURATION_TYPES  
will be set to the available configurations.  Currently, Xcode 2.X, and
all visual studio IDE builds have this variable.   The makefiles generators
do not set this variable.

CMAKE_CFG_INTDIR is set to "." for makefiles, and it is set to a variable
that can be expanded at build time.   It is meant for
use in custom commands and targets.   It can not be used in configure file.
For example, if you want to run an executable that you just built in
a custom command you would use CMAKE_CFG_INTDIR as part of the path.
bin/${CMAKE_CFG_INTDIR}/myprogram, with makefiles this would expand to
bin/./myprogram, and in a visual studio project it would expand to
bin/$(INTDIR)/myprogram, and for Xcode it will be bin/$(CONFIGURATION)/myprogram.

Generally, CMAKE_CONFIGURATION_TYPES  is used to pre-create files that are needed
for each possible build type, like you have in usage 1.

Your usage 2, will not do anything useful.

-Bill




More information about the CMake mailing list