diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index ab6a26c974..b7bf4a6f7e 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -6914,6 +6914,14 @@ void cmGeneratorTarget::GetLanguages(std::set& languages, } } +bool cmGeneratorTarget::IsLanguageUsed(std::string const& language, + std::string const& config) const +{ + std::set languages; + this->GetLanguages(languages, config); + return languages.count(language); +} + bool cmGeneratorTarget::IsCSharpOnly() const { // Only certain target types may compile CSharp. diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h index 3aedbf53e6..ea3a684a13 100644 --- a/Source/cmGeneratorTarget.h +++ b/Source/cmGeneratorTarget.h @@ -397,6 +397,8 @@ public: // until we have per-target object file properties. void GetLanguages(std::set& languages, std::string const& config) const; + bool IsLanguageUsed(std::string const& language, + std::string const& config) const; bool IsCSharpOnly() const; diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index f58c6fd717..2ea28393e2 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -3018,7 +3018,8 @@ bool cmVisualStudio10TargetGenerator::ComputeCudaOptions() return true; } for (std::string const& c : this->Configurations) { - if (!this->ComputeCudaOptions(c)) { + if (this->GeneratorTarget->IsLanguageUsed("CUDA", c) && + !this->ComputeCudaOptions(c)) { return false; } } @@ -3158,7 +3159,8 @@ bool cmVisualStudio10TargetGenerator::ComputeCudaOptions( void cmVisualStudio10TargetGenerator::WriteCudaOptions( Elem& e1, std::string const& configName) { - if (!this->MSTools || !this->GlobalGenerator->IsCudaEnabled()) { + if (!this->MSTools || !this->GlobalGenerator->IsCudaEnabled() || + !this->GeneratorTarget->IsLanguageUsed("CUDA", configName)) { return; } Elem e2(e1, "CudaCompile"); diff --git a/Tests/RunCMake/CMP0104/CMP0104-Common.cmake b/Tests/RunCMake/CMP0104/CMP0104-Common.cmake index b3568f113d..ca4c1aa225 100644 --- a/Tests/RunCMake/CMP0104/CMP0104-Common.cmake +++ b/Tests/RunCMake/CMP0104/CMP0104-Common.cmake @@ -1,2 +1,6 @@ +# Make sure CMP0104 isn't issued for CXX targets created prior to enabling CUDA. See #21341. +enable_language(CXX) +add_library(cxx main.cxx) + enable_language(CUDA) add_library(cuda main.cu) diff --git a/Tests/RunCMake/CMP0104/main.cxx b/Tests/RunCMake/CMP0104/main.cxx new file mode 100644 index 0000000000..5047a34e39 --- /dev/null +++ b/Tests/RunCMake/CMP0104/main.cxx @@ -0,0 +1,3 @@ +int main() +{ +}