VS: Add compile properties to .NET Sdk projects

This commit is contained in:
Maxime Raynaud
2022-06-15 10:59:16 -04:00
parent ca8a5b05de
commit ba6cecea8e
4 changed files with 88 additions and 0 deletions
@@ -952,6 +952,10 @@ void cmVisualStudio10TargetGenerator::WriteSdkStyleProjectFile(
std::string outDir = this->GeneratorTarget->GetDirectory(config) + "/";
ConvertToWindowsSlash(outDir);
e1.Element("OutputPath", outDir);
Options& o = *(this->ClOptions[config]);
OptionsHelper oh(o, e1);
oh.OutputFlagMap();
}
this->WriteDotNetDocumentationFile(e0);
@@ -4,6 +4,7 @@ include(RunCMake)
run_cmake(VsDotnetSdkCustomCommandsTarget)
run_cmake(VsDotnetSdkCustomCommandsSource)
run_cmake(VsDotnetSdkStartupObject)
run_cmake(VsDotnetSdkDefines)
run_cmake(DotnetSdkVariables)
function(run_VsDotnetSdk)
@@ -0,0 +1,64 @@
#
# Check C# VS project for required elements.
#
set(csProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.csproj")
if(NOT EXISTS "${csProjectFile}")
set(RunCMake_TEST_FAILED "Project file ${csProjectFile} does not exist.")
return()
endif()
set(inDebug FALSE)
set(inRelease FALSE)
set(debugOK FALSE)
set(releaseOK FALSE)
file(STRINGS "${csProjectFile}" lines)
foreach(line IN LISTS lines)
#message(STATUS ${line})
if(line MATCHES "^ *<PropertyGroup .*Debug.*")
set(inDebug TRUE)
elseif(line MATCHES "^ *<PropertyGroup .*Release.*")
set(inRelease TRUE)
elseif(line MATCHES "^ *</PropertyGroup> *$")
set(inRelease FALSE)
set(inDebug FALSE)
elseif(inDebug AND
(line MATCHES "^ *<DefineConstants>.*MY_FOO_DEFINE.*</DefineConstants> *$") AND
(line MATCHES "^ *<DefineConstants>.*DEFINE_ONLY_FOR_DEBUG.*</DefineConstants> *$") AND
(NOT (line MATCHES "^ *<DefineConstants>.*DEFINE_ONLY_FOR_RELEASE.*</DefineConstants> *$")) AND
(NOT (line MATCHES "^ *<DefineConstants>.*MY_BAR_ASSIGNMENT=bar.*</DefineConstants> *$"))
)
set(debugOK TRUE)
elseif(inRelease AND
(line MATCHES "^ *<DefineConstants>.*MY_FOO_DEFINE.*</DefineConstants> *$") AND
(line MATCHES "^ *<DefineConstants>.*DEFINE_ONLY_FOR_RELEASE.*</DefineConstants> *$") AND
(NOT (line MATCHES "^ *<DefineConstants>.*DEFINE_ONLY_FOR_DEBUG.*</DefineConstants> *$")) AND
(NOT (line MATCHES "^ *<DefineConstants>.*MY_BAR_ASSIGNMENT=bar.*</DefineConstants> *$"))
)
set(releaseOK TRUE)
endif()
endforeach()
function(print_csprojfile)
file(STRINGS "${csProjectFile}" lines)
foreach(line IN LISTS lines)
message(STATUS ${line})
endforeach()
endfunction()
if(NOT debugOK)
message(STATUS "Failed to set Debug configuration defines correctly.")
set(RunCMake_TEST_FAILED "Failed to set Debug configuration defines correctly.")
print_csprojfile()
return()
endif()
if(NOT releaseOK)
message(STATUS "Failed to set Release configuration defines correctly.")
set(RunCMake_TEST_FAILED "Failed to set Release configuration defines correctly.")
print_csprojfile()
return()
endif()
@@ -0,0 +1,19 @@
enable_language(CSharp)
if(NOT CMAKE_CSharp_COMPILER)
return()
endif()
set(CMAKE_DOTNET_SDK "Microsoft.NET.Sdk")
set(CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION "net5.0")
add_executable(foo csharponly.cs lib1.cs)
# Issue 23376
target_compile_definitions(
foo
PUBLIC
MY_FOO_DEFINE
"MY_BAR_ASSIGNMENT=bar"
$<$<CONFIG:Debug>:DEFINE_ONLY_FOR_DEBUG>
$<$<CONFIG:Release>:DEFINE_ONLY_FOR_RELEASE>
)