mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-20 12:53:55 +08:00

committed by
Brad King

parent
4bbd315097
commit
d145d72e70
@@ -335,6 +335,7 @@ Properties on Targets
|
|||||||
/prop_tgt/VS_KEYWORD
|
/prop_tgt/VS_KEYWORD
|
||||||
/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION
|
/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION
|
||||||
/prop_tgt/VS_NO_SOLUTION_DEPLOY
|
/prop_tgt/VS_NO_SOLUTION_DEPLOY
|
||||||
|
/prop_tgt/VS_PROJECT_IMPORT
|
||||||
/prop_tgt/VS_SCC_AUXPATH
|
/prop_tgt/VS_SCC_AUXPATH
|
||||||
/prop_tgt/VS_SCC_LOCALPATH
|
/prop_tgt/VS_SCC_LOCALPATH
|
||||||
/prop_tgt/VS_SCC_PROJECTNAME
|
/prop_tgt/VS_SCC_PROJECTNAME
|
||||||
|
8
Help/prop_tgt/VS_PROJECT_IMPORT.rst
Normal file
8
Help/prop_tgt/VS_PROJECT_IMPORT.rst
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
VS_PROJECT_IMPORT
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Visual Studio managed project imports
|
||||||
|
|
||||||
|
Adds to a generated Visual Studio project one or more semicolon-delimited paths
|
||||||
|
to .props files needed when building projects from some NuGet packages.
|
||||||
|
For example, ``my_packages_path/MyPackage.1.0.0/build/MyPackage.props``.
|
5
Help/release/dev/vs-project-import.rst
Normal file
5
Help/release/dev/vs-project-import.rst
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
vs-project-import
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* The :prop_tgt:`VS_PROJECT_IMPORT` target property was added which allows
|
||||||
|
to import external .props files in managed Visual Studio targets.
|
@@ -662,6 +662,7 @@ void cmVisualStudio10TargetGenerator::Generate()
|
|||||||
this->WriteCustomCommands(e0);
|
this->WriteCustomCommands(e0);
|
||||||
this->WriteAllSources(e0);
|
this->WriteAllSources(e0);
|
||||||
this->WriteDotNetReferences(e0);
|
this->WriteDotNetReferences(e0);
|
||||||
|
this->WriteImports(e0);
|
||||||
this->WriteEmbeddedResourceGroup(e0);
|
this->WriteEmbeddedResourceGroup(e0);
|
||||||
this->WriteXamlFilesGroup(e0);
|
this->WriteXamlFilesGroup(e0);
|
||||||
this->WriteWinRTReferences(e0);
|
this->WriteWinRTReferences(e0);
|
||||||
@@ -810,6 +811,24 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReference(
|
|||||||
this->WriteDotNetReferenceCustomTags(e2, ref);
|
this->WriteDotNetReferenceCustomTags(e2, ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmVisualStudio10TargetGenerator::WriteImports(Elem& e0)
|
||||||
|
{
|
||||||
|
const char* imports =
|
||||||
|
this->GeneratorTarget->Target->GetProperty("VS_PROJECT_IMPORT");
|
||||||
|
if (imports) {
|
||||||
|
std::vector<std::string> argsSplit;
|
||||||
|
cmSystemTools::ExpandListArgument(std::string(imports), argsSplit, false);
|
||||||
|
for (auto& path : argsSplit) {
|
||||||
|
if (!cmsys::SystemTools::FileIsFullPath(path)) {
|
||||||
|
path = this->Makefile->GetCurrentSourceDirectory() + "/" + path;
|
||||||
|
}
|
||||||
|
ConvertToWindowsSlash(path);
|
||||||
|
Elem e1(e0, "Import");
|
||||||
|
e1.Attribute("Project", path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cmVisualStudio10TargetGenerator::WriteDotNetReferenceCustomTags(
|
void cmVisualStudio10TargetGenerator::WriteDotNetReferenceCustomTags(
|
||||||
Elem& e2, std::string const& ref)
|
Elem& e2, std::string const& ref)
|
||||||
{
|
{
|
||||||
|
@@ -76,6 +76,7 @@ private:
|
|||||||
void WriteDotNetReference(Elem& e1, std::string const& ref,
|
void WriteDotNetReference(Elem& e1, std::string const& ref,
|
||||||
std::string const& hint,
|
std::string const& hint,
|
||||||
std::string const& config);
|
std::string const& config);
|
||||||
|
void WriteImports(Elem& e0);
|
||||||
void WriteDotNetReferenceCustomTags(Elem& e2, std::string const& ref);
|
void WriteDotNetReferenceCustomTags(Elem& e2, std::string const& ref);
|
||||||
void WriteEmbeddedResourceGroup(Elem& e0);
|
void WriteEmbeddedResourceGroup(Elem& e0);
|
||||||
void WriteWinRTReferences(Elem& e0);
|
void WriteWinRTReferences(Elem& e0);
|
||||||
|
@@ -18,3 +18,4 @@ run_cmake(VsCSharpDeployFiles)
|
|||||||
run_cmake(VSCSharpDefines)
|
run_cmake(VSCSharpDefines)
|
||||||
run_cmake(VsSdkDirectories)
|
run_cmake(VsSdkDirectories)
|
||||||
run_cmake(VsGlobals)
|
run_cmake(VsGlobals)
|
||||||
|
run_cmake(VsProjectImport)
|
||||||
|
28
Tests/RunCMake/VS10Project/VsProjectImport-check.cmake
Normal file
28
Tests/RunCMake/VS10Project/VsProjectImport-check.cmake
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")
|
||||||
|
if(NOT EXISTS "${vcProjectFile}")
|
||||||
|
set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(test1Import "path\\\\to\\\\nuget_packages\\\\Foo.1.0.0\\\\build\\\\Foo.props")
|
||||||
|
set(test2Import "path\\\\to\\\\nuget_packages\\\\Bar.1.0.0\\\\build\\\\Bar.props")
|
||||||
|
|
||||||
|
set(import1Found FALSE)
|
||||||
|
set(import2Found FALSE)
|
||||||
|
|
||||||
|
file(STRINGS "${vcProjectFile}" lines)
|
||||||
|
|
||||||
|
foreach(i 1 2)
|
||||||
|
set(testImport "${test${i}Import}")
|
||||||
|
foreach(line IN LISTS lines)
|
||||||
|
if(line MATCHES "^ *<Import Project=\".*${test1Import}\" />$")
|
||||||
|
message(STATUS "foo.vcxproj is using project import ${testImport}")
|
||||||
|
set(import${i}Found TRUE)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(NOT import1Found OR NOT import2Found)
|
||||||
|
set(RunCMake_TEST_FAILED "Imported project not found.")
|
||||||
|
return()
|
||||||
|
endif()
|
11
Tests/RunCMake/VS10Project/VsProjectImport.cmake
Normal file
11
Tests/RunCMake/VS10Project/VsProjectImport.cmake
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
enable_language(CXX)
|
||||||
|
add_library(foo foo.cpp)
|
||||||
|
|
||||||
|
set(test1Import "path/to/nuget_packages/Foo.1.0.0/build/Foo.props")
|
||||||
|
set(test2Import "path/to/nuget_packages/Bar.1.0.0/build/Bar.props")
|
||||||
|
|
||||||
|
set_property(TARGET foo PROPERTY
|
||||||
|
VS_PROJECT_IMPORT
|
||||||
|
${test1Import}
|
||||||
|
${test2Import}
|
||||||
|
)
|
Reference in New Issue
Block a user