VS: Add option to put INSTALL target in .sln default build
Add a CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD variable to control this behavior.
This commit is contained in:
parent
562e69dd50
commit
a6e4e73da3
|
@ -268,6 +268,7 @@ Variables that Control the Build
|
||||||
/variable/CMAKE_TRY_COMPILE_CONFIGURATION
|
/variable/CMAKE_TRY_COMPILE_CONFIGURATION
|
||||||
/variable/CMAKE_USE_RELATIVE_PATHS
|
/variable/CMAKE_USE_RELATIVE_PATHS
|
||||||
/variable/CMAKE_VISIBILITY_INLINES_HIDDEN
|
/variable/CMAKE_VISIBILITY_INLINES_HIDDEN
|
||||||
|
/variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
|
||||||
/variable/CMAKE_WIN32_EXECUTABLE
|
/variable/CMAKE_WIN32_EXECUTABLE
|
||||||
/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute
|
/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute
|
||||||
/variable/EXECUTABLE_OUTPUT_PATH
|
/variable/EXECUTABLE_OUTPUT_PATH
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
vs-install-in-default-build
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
* The :ref:`Visual Studio Generators` learned a new
|
||||||
|
:variable:`CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD` option
|
||||||
|
to put the ``INSTALL`` target in the default build of a
|
||||||
|
solution (``.sln``) file.
|
|
@ -0,0 +1,8 @@
|
||||||
|
CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
Include INSTALL target to default build.
|
||||||
|
|
||||||
|
In Visual Studio solution, by default the INSTALL target will not be part of
|
||||||
|
the default build. Setting this variable will enable the INSTALL target to be
|
||||||
|
part of the default build.
|
|
@ -1031,6 +1031,24 @@ cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild(
|
||||||
int type = target->GetType();
|
int type = target->GetType();
|
||||||
if (type == cmTarget::GLOBAL_TARGET)
|
if (type == cmTarget::GLOBAL_TARGET)
|
||||||
{
|
{
|
||||||
|
// check if INSTALL target is part of default build
|
||||||
|
if(target->GetName() == "INSTALL")
|
||||||
|
{
|
||||||
|
// inspect CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD properties
|
||||||
|
for(std::vector<std::string>::iterator i = this->Configurations.begin();
|
||||||
|
i != this->Configurations.end(); ++i)
|
||||||
|
{
|
||||||
|
const char* propertyValue = target->GetMakefile()
|
||||||
|
->GetDefinition("CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD");
|
||||||
|
cmGeneratorExpression ge;
|
||||||
|
cmsys::auto_ptr<cmCompiledGeneratorExpression>
|
||||||
|
cge = ge.Parse(propertyValue);
|
||||||
|
if(cmSystemTools::IsOn(cge->Evaluate(target->GetMakefile(), *i)))
|
||||||
|
{
|
||||||
|
activeConfigs.insert(*i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return activeConfigs;
|
return activeConfigs;
|
||||||
}
|
}
|
||||||
if(type == cmTarget::UTILITY && !this->IsDependedOn(projectTargets, target))
|
if(type == cmTarget::UTILITY && !this->IsDependedOn(projectTargets, target))
|
||||||
|
|
|
@ -1870,6 +1870,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
|
||||||
--build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
|
--build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
|
||||||
--build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
|
--build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
|
||||||
--build-project VSExcludeFromDefaultBuild
|
--build-project VSExcludeFromDefaultBuild
|
||||||
|
--build-target install
|
||||||
--test-command ${CMAKE_COMMAND}
|
--test-command ${CMAKE_COMMAND}
|
||||||
-D "activeConfig=${config}"
|
-D "activeConfig=${config}"
|
||||||
-D "allConfigs=${CMAKE_CONFIGURATION_TYPES}"
|
-D "allConfigs=${CMAKE_CONFIGURATION_TYPES}"
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
cmake_minimum_required(VERSION 2.8.9)
|
cmake_minimum_required(VERSION 2.8.9)
|
||||||
project(VSExcludeFromDefaultBuild)
|
project(VSExcludeFromDefaultBuild)
|
||||||
|
|
||||||
|
# CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD will enable the INSTALL target to be part of the default build
|
||||||
|
set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
|
||||||
|
|
||||||
# First step is to clear all .exe files in output so that possible past
|
# First step is to clear all .exe files in output so that possible past
|
||||||
# failures of this test do not prevent it from succeeding.
|
# failures of this test do not prevent it from succeeding.
|
||||||
add_custom_target(ClearExes ALL
|
add_custom_target(ClearExes ALL
|
||||||
|
@ -13,6 +16,7 @@ add_custom_target(ClearExes ALL
|
||||||
function(add_test_executable target)
|
function(add_test_executable target)
|
||||||
add_executable("${target}" ${ARGN})
|
add_executable("${target}" ${ARGN})
|
||||||
add_dependencies("${target}" ClearExes)
|
add_dependencies("${target}" ClearExes)
|
||||||
|
install(TARGETS "${target}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/install" OPTIONAL)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
add_test_executable(DefaultBuilt main.c)
|
add_test_executable(DefaultBuilt main.c)
|
||||||
|
|
|
@ -2,3 +2,7 @@ file(GLOB exeFiles "${dir}/*.exe")
|
||||||
foreach(exeFile IN LISTS exeFiles)
|
foreach(exeFile IN LISTS exeFiles)
|
||||||
file(REMOVE "${exeFile}")
|
file(REMOVE "${exeFile}")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
file(GLOB exeFiles "${dir}/install/*.exe")
|
||||||
|
foreach(exeFile IN LISTS exeFiles)
|
||||||
|
file(REMOVE "${exeFile}")
|
||||||
|
endforeach()
|
||||||
|
|
|
@ -7,6 +7,12 @@ macro(TestExists exeName)
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "File ${exeFile} was expected ${ARGN} to exist!")
|
message(FATAL_ERROR "File ${exeFile} was expected ${ARGN} to exist!")
|
||||||
endif()
|
endif()
|
||||||
|
set(exeFile "${dir}/${activeConfig}/install/${exeName}.exe")
|
||||||
|
if(${ARGN} EXISTS "${exeFile}")
|
||||||
|
message(STATUS "File ${exeFile} was correctly found ${ARGN} to exist.")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "File ${exeFile} was expected ${ARGN} to exist!")
|
||||||
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
TestExists(DefaultBuilt)
|
TestExists(DefaultBuilt)
|
||||||
|
|
Loading…
Reference in New Issue