mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-25 10:18:34 -06:00
@@ -2620,6 +2620,10 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
|
||||
}
|
||||
clOptions.AddDefines(targetDefines);
|
||||
|
||||
if (this->ProjectType == csproj) {
|
||||
clOptions.AppendFlag("DefineConstants", targetDefines);
|
||||
}
|
||||
|
||||
// Get includes for this target
|
||||
if (!this->LangForClCompile.empty()) {
|
||||
clOptions.AddIncludes(
|
||||
|
||||
@@ -14,5 +14,6 @@ run_cmake(VsCSharpCustomTags)
|
||||
run_cmake(VsCSharpReferenceProps)
|
||||
run_cmake(VsCSharpWithoutSources)
|
||||
run_cmake(VsCSharpDeployFiles)
|
||||
run_cmake(VSCSharpDefines)
|
||||
run_cmake(VsSdkDirectories)
|
||||
run_cmake(VsGlobals)
|
||||
|
||||
64
Tests/RunCMake/VS10Project/VsCSharpDefines-check.cmake
Normal file
64
Tests/RunCMake/VS10Project/VsCSharpDefines-check.cmake
Normal file
@@ -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\\|(Win32|x64).*")
|
||||
set(inDebug TRUE)
|
||||
elseif(line MATCHES "^ *<PropertyGroup .*Release\\|(Win32|x64).*")
|
||||
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
|
||||
(line MATCHES "^ *<DefineConstants>.*MY_BAR_ASSIGNMENT=bar.*</DefineConstants> *$") AND
|
||||
(NOT (line MATCHES "^ *<DefineConstants>.*DEFINE_ONLY_FOR_RELEASE.*</DefineConstants> *$"))
|
||||
)
|
||||
set(debugOK TRUE)
|
||||
elseif(inRelease AND
|
||||
(line MATCHES "^ *<DefineConstants>.*MY_FOO_DEFINE.*</DefineConstants> *$") AND
|
||||
(line MATCHES "^ *<DefineConstants>.*DEFINE_ONLY_FOR_RELEASE.*</DefineConstants> *$") AND
|
||||
(line MATCHES "^ *<DefineConstants>.*MY_BAR_ASSIGNMENT=bar.*</DefineConstants> *$") AND
|
||||
(NOT (line MATCHES "^ *<DefineConstants>.*DEFINE_ONLY_FOR_DEBUG.*</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()
|
||||
18
Tests/RunCMake/VS10Project/VsCSharpDefines.cmake
Normal file
18
Tests/RunCMake/VS10Project/VsCSharpDefines.cmake
Normal file
@@ -0,0 +1,18 @@
|
||||
enable_language(CSharp)
|
||||
|
||||
add_library(foo SHARED
|
||||
foo.cs)
|
||||
|
||||
set_target_properties(foo PROPERTIES
|
||||
LINKER_LANGUAGE CSharp)
|
||||
|
||||
|
||||
# Issue 18698
|
||||
target_compile_definitions(
|
||||
foo
|
||||
PUBLIC
|
||||
MY_FOO_DEFINE
|
||||
"MY_BAR_ASSIGNMENT=bar"
|
||||
$<$<CONFIG:Debug>:DEFINE_ONLY_FOR_DEBUG>
|
||||
$<$<CONFIG:Release>:DEFINE_ONLY_FOR_RELEASE>
|
||||
)
|
||||
Reference in New Issue
Block a user