The following issue has been SUBMITTED. ====================================================================== http://public.kitware.com/Bug/view.php?id=14705 ====================================================================== Reported By: Brian J. Davis Assigned To: ====================================================================== Project: CMake Issue ID: 14705 Category: CMake Reproducibility: always Severity: minor Priority: normal Status: new ====================================================================== Date Submitted: 2014-01-17 15:02 EST Last Modified: 2014-01-17 15:02 EST ====================================================================== Summary: ExternalProject_Add seems to ingores meaning of INTERNAL when passed in as var in -D <var>:<type>=<value> Description:
ExternalProject_Add seems to ingores meaning of INTERNAL when passed in as var in -D <var>:<type>=<value> see: http://www.cmake.org/cmake/help/v2.8.12/cmake.html#opt:-Dvar:typevalue where type is documented in set as one of: http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:set <type> may be one of FILEPATH = File chooser dialog. PATH = Directory chooser dialog. STRING = Arbitrary string. BOOL = Boolean ON/OFF checkbox. INTERNAL = No GUI entry (used for persistent variables). and If <type> is INTERNAL, the cache variable is marked as internal, and will not be shown to the user in tools like cmake-gui. This is intended for values that should be persisted in the cache, but which users should not normally change. INTERNAL implies FORCE. I was expecting variable spassed with -DVAR:INTERNAL="value" to be forced in sub project added by using externalproject_add, but it does not seem to. Should it? Is this expected behavior? Is it a bug? Steps to Reproduce: See attached zip file or: Create a file with contents in a directory referred to here as TOP # START # ${TOP}/CMakeList.txt ======================================================= # check required version of CMake CMAKE_MINIMUM_REQUIRED(VERSION 2.0) #IF(CMAKE_BACKWARDS_COMPATIBILITY GREATER 2.0.6) # SET(CMAKE_BACKWARDS_COMPATIBILITY 2.0.6 CACHE STRING "Latest version of CMake when this project was released." FORCE) #ENDIF(CMAKE_BACKWARDS_COMPATIBILITY GREATER 2.0.6) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) include( ExternalProject ) SET( TOP ${CMAKE_CURRENT_LIST_DIR} ) set( SOURCE_DIR ${TOP}/some_external_project ) set( EXTERNAL_PROJECT_GLOBAL_COMPILER_FLAGS -DCMAKE_CXX_FLAGS_INIT:INTERNAL="${CMAKE_CXX_FLAGS_INIT}" -DCMAKE_CXX_FLAGS_DEBUG:INTERNAL="${CMAKE_CXX_FLAGS_DEBUG}" -DCMAKE_CXX_FLAGS_DEBUG_INIT:INTERNAL="${CMAKE_CXX_FLAGS_DEBUG_INIT}" -DCMAKE_C_FLAGS_DEBUG:INTERNAL="${CMAKE_C_FLAGS_DEBUG}" -DCMAKE_C_FLAGS_DEBUG_INIT:INTERNAL="${CMAKE_C_FLAGS_DEBUG_INIT}" CACHE STRING "" FORCE ) set( CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_LIST_DIR}/install CACHE STRING "" FORCE ) set( INSTALL_PREFIX CACHE STRING "" FORCE ) message( "EXTERNAL_PROJECT_GLOBAL_COMPILER_FLAGS ${EXTERNAL_PROJECT_GLOBAL_COMPILER_FLAGS}" ) add_custom_target( bob ALL echo "HELLO WORLD =====================================================================================================" ) ExternalProject_Add( some_proj # [DEPENDS projects...] # PREFIX ${SOURCE_DIR} # [LIST_SEPARATOR sep] # [TMP_DIR dir] # [STAMP_DIR dir] #--Download step-------------- DOWNLOAD_COMMAND "" # GIT_REPOSITORY ${URI} # GIT_TAG ${GIT_TAG} #--Update/Patch step---------- # UPDATE_COMMAND "" # PATCH_COMMAND "" #--Configure step------------- SOURCE_DIR ${SOURCE_DIR} # CONFIGURE_COMMAND "" # [CMAKE_COMMAND /.../cmake] # CMAKE_GENERATOR ${CMAKE_GENERATOR} # CMAKE_GENERATOR_TOOLSET ${CMAKE_GENERATOR_TOOLSET} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DINSTALL_PREFIX=${INSTALL_PREFIX} ${EXTERNAL_PROJECT_GLOBAL_COMPILER_FLAGS} # [CMAKE_CACHE_ARGS args...] #--Build step----------------- # BINARY_DIR ${BUILD_DIR} # BUILD_COMMAND "" # [BUILD_IN_SOURCE 1] #--Install step--------------- # INSTALL_DIR ${INSTALL_PREFIX} INSTALL_COMMAND "" #--Test step------------------ # [TEST_BEFORE_INSTALL 1] # [TEST_AFTER_INSTALL 1] # [TEST_COMMAND cmd...] #--Output logging------------- # [LOG_DOWNLOAD 1] # [LOG_UPDATE 1] # [LOG_CONFIGURE 1] # [LOG_BUILD 1] # [LOG_TEST 1] # [LOG_INSTALL 1] #--Custom targets------------- # [STEP_TARGETS st1 st2 ...] # STEP_TARGETS bob bob bob bob bob ) # ${TOP}/CMakeList.txt ======================================================= # END Also create the Following CMakeLists.txt file in ${TOP}/some_external_project direcotry # START # ${TOP}/some_external_project/CMakeList.txt =================== # check required version of CMake CMAKE_MINIMUM_REQUIRED(VERSION 2.0) #IF(CMAKE_BACKWARDS_COMPATIBILITY GREATER 2.0.6) # SET(CMAKE_BACKWARDS_COMPATIBILITY 2.0.6 CACHE STRING "Latest version of CMake when this project was released." FORCE) #ENDIF(CMAKE_BACKWARDS_COMPATIBILITY GREATER 2.0.6) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) # these settings never change even for C or C++ SET(CMAKE_C_FLAGS_DEBUG "/MTd /Z7 /Od") SET(CMAKE_C_FLAGS_RELEASE "/DNDEBUG /MT /O2") SET(CMAKE_C_FLAGS_MINSIZEREL "/DNDEBUG /MT /O2") SET(CMAKE_C_FLAGS_RELWITHDEBINFO "/DNDEBUG /MTd /Z7 /Od") SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") SET(CMAKE_CXX_FLAGS_RELEASE "/DNDEBUG /MT /O2") SET(CMAKE_CXX_FLAGS_MINSIZEREL "/DNDEBUG /MT /O2") SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/DNDEBUG /MTd /Z7 /Od") message( "CMAKE_CXX_FLAGS_INIT:INTERNAL=${CMAKE_CXX_FLAGS_INIT}" ) message( "CMAKE_CXX_FLAGS_DEBUG:INTERNAL=${CMAKE_CXX_FLAGS_DEBUG" ) message( "CMAKE_CXX_FLAGS_DEBUG_INIT:INTERNAL=${CMAKE_CXX_FLAGS_DEBUG_INIT}" ) message( "CMAKE_C_FLAGS_DEBUG:INTERNAL=${CMAKE_C_FLAGS_DEBUG}" ) message( "CMAKE_C_FLAGS_DEBUG_INIT:INTERNAL=${CMAKE_C_FLAGS_DEBUG_INIT}" ) set( CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_LIST_DIR}/install CACHE STRING "" FORCE ) set( CMD echo "CMAKE_C_FLAGS_DEBUG = ${CMAKE_C_FLAGS_DEBUG}" ) add_custom_target( pete ALL ${CMD} ) # ${TOP}/some_external_project/CMakeList.txt =================== # END The following ouput should be seen in VS output window regarding output pete where last line CMAKE_C_FLAGS_DEBUG is not as expected (/MTd option specified): 3> 2> Creating "x64\Debug\pete\pete.unsuccessfulbuild" because "AlwaysCreate" was specified. 3> 3> 2>CustomBuild: 3> 3> 2> Building Custom Rule C:/projects/CMakeTesting/external_project_test/some_external_project/CMakeLists.txt 3> 3> 2> CMake does not need to re-run because C:\projects\CMakeTesting\external_project_test\build\some_proj-prefix\src\some_proj-build\CMakeFiles\generate.stamp is up-to-date. 3> 3> 2> "CMAKE_C_FLAGS_DEBUG = /MTd /Z7 /Od" Additional Information: Attached is zipped version of above files. Any version of VS should do. ====================================================================== Issue History Date Modified Username Field Change ====================================================================== 2014-01-17 15:02 Brian J. Davis New Issue 2014-01-17 15:02 Brian J. Davis File Added: external_project_test.zip ====================================================================== -- 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://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers