[CMake] Quick question about set and substitutions

J Decker d3ck0r at gmail.com
Thu Sep 16 19:46:13 EDT 2010


I want to define a variablle that I can use later to pass the string
program name or library name so I have something lke...

# have to compare generator because MINGW and CMAKE_COMPILER_IS_GNUCC
are not defined yet...
# would also like to use a more general idea like compier is GCC...
if(CMAKE_GENERATOR MATCHES "MinGW Makefiles")
  SET( DEFINE_STRING_QUOTE_OPEN "\"\\\"" )
  SET( DEFINE_STRING_QUOTE_CLOSE "\\\"\"" )
endif( CMAKE_GENERATOR MATCHES "MinGW Makefiles")


SET( PROGRAM_NAME
${DEFINE_STRING_QUOTE_OPEN}${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}${DEFINE_STRING_QUOTE_CLOSE})
SET( LIBRARY_NAME
${DEFINE_STRING_QUOTE_OPEN}${CMAKE_LIBRARY_PREFIX}${PROJECT_NAME}${CMAKE_LIBRARY_SUFFIX}${DEFINE_STRING_QUOTE_CLOSE})

but when I use these, the substitution was done at the time the SET
happened instead of later when it is referenced...  can I add \'s to
escape the dollars or something to delay expansion until it is used?
Macros can't be used for this sort of thing, right?

later when I do
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES
                  COMPILE_FLAGS  "-DTARGETNAME=${PROGRAM_NAME}"
)

TARGETNAME="\"\""


More information about the CMake mailing list