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

Reply via email to