[cmake-developers] [CMake 0014705]: ExternalProject_Add seems to ingores meaning of INTERNAL when passed in as var in -D <var>:<type>=<value>
Mantis Bug Tracker
mantis at public.kitware.com
Fri Jan 17 15:02:43 EST 2014
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
======================================================================
More information about the cmake-developers
mailing list