mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-17 07:11:52 +08:00
Autogen: Adaptive missing Qt warning
This makes the warning message for a missing Qt use the requested Qt version in the message text.
This commit is contained in:
@@ -85,8 +85,8 @@ cmQtAutoGenGlobalInitializer::cmQtAutoGenGlobalInitializer(
|
|||||||
|
|
||||||
// We support Qt4, Qt5 and Qt6
|
// We support Qt4, Qt5 and Qt6
|
||||||
auto qtVersion = cmQtAutoGenInitializer::GetQtVersion(target);
|
auto qtVersion = cmQtAutoGenInitializer::GetQtVersion(target);
|
||||||
bool const validQt = (qtVersion.Major == 4) ||
|
bool const validQt = (qtVersion.first.Major == 4) ||
|
||||||
(qtVersion.Major == 5) || (qtVersion.Major == 6);
|
(qtVersion.first.Major == 5) || (qtVersion.first.Major == 6);
|
||||||
|
|
||||||
bool const mocAvailable = (validQt || !mocExec.empty());
|
bool const mocAvailable = (validQt || !mocExec.empty());
|
||||||
bool const uicAvailable = (validQt || !uicExec.empty());
|
bool const uicAvailable = (validQt || !uicExec.empty());
|
||||||
@@ -104,10 +104,16 @@ cmQtAutoGenGlobalInitializer::cmQtAutoGenGlobalInitializer(
|
|||||||
msg += ". ";
|
msg += ". ";
|
||||||
msg += cmQtAutoGen::Tools(mocDisabled, uicDisabled, rccDisabled);
|
msg += cmQtAutoGen::Tools(mocDisabled, uicDisabled, rccDisabled);
|
||||||
msg += " disabled. Consider adding:\n";
|
msg += " disabled. Consider adding:\n";
|
||||||
if (uicDisabled) {
|
{
|
||||||
msg += " find_package(Qt5 COMPONENTS Widgets)\n";
|
std::string version = (qtVersion.second == 0)
|
||||||
} else {
|
? std::string("<QTVERSION>")
|
||||||
msg += " find_package(Qt5 COMPONENTS Core)\n";
|
: std::to_string(qtVersion.second);
|
||||||
|
std::string comp = uicDisabled ? "Widgets" : "Core";
|
||||||
|
msg += " find_package(Qt";
|
||||||
|
msg += version;
|
||||||
|
msg += " COMPONENTS ";
|
||||||
|
msg += comp;
|
||||||
|
msg += ")\n";
|
||||||
}
|
}
|
||||||
msg += "to your CMakeLists.txt file.";
|
msg += "to your CMakeLists.txt file.";
|
||||||
target->Makefile->IssueMessage(cmake::AUTHOR_WARNING, msg);
|
target->Makefile->IssueMessage(cmake::AUTHOR_WARNING, msg);
|
||||||
@@ -115,7 +121,7 @@ cmQtAutoGenGlobalInitializer::cmQtAutoGenGlobalInitializer(
|
|||||||
if (mocIsValid || uicIsValid || rccIsValid) {
|
if (mocIsValid || uicIsValid || rccIsValid) {
|
||||||
// Create autogen target initializer
|
// Create autogen target initializer
|
||||||
Initializers_.emplace_back(cm::make_unique<cmQtAutoGenInitializer>(
|
Initializers_.emplace_back(cm::make_unique<cmQtAutoGenInitializer>(
|
||||||
this, target, qtVersion, mocIsValid, uicIsValid, rccIsValid,
|
this, target, qtVersion.first, mocIsValid, uicIsValid, rccIsValid,
|
||||||
globalAutoGenTarget, globalAutoRccTarget));
|
globalAutoGenTarget, globalAutoRccTarget));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1409,32 +1409,31 @@ static std::vector<cmQtAutoGenInitializer::IntegerVersion> GetKnownQtVersions(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmQtAutoGenInitializer::IntegerVersion cmQtAutoGenInitializer::GetQtVersion(
|
std::pair<cmQtAutoGenInitializer::IntegerVersion, unsigned int>
|
||||||
cmGeneratorTarget const* target)
|
cmQtAutoGenInitializer::GetQtVersion(cmGeneratorTarget const* target)
|
||||||
{
|
{
|
||||||
|
std::pair<IntegerVersion, unsigned int> res(
|
||||||
|
IntegerVersion(),
|
||||||
|
CharPtrToInt(target->GetLinkInterfaceDependentStringProperty(
|
||||||
|
"QT_MAJOR_VERSION", "")));
|
||||||
|
|
||||||
auto knownQtVersions = GetKnownQtVersions(target);
|
auto knownQtVersions = GetKnownQtVersions(target);
|
||||||
if (knownQtVersions.empty()) {
|
if (!knownQtVersions.empty()) {
|
||||||
return cmQtAutoGenInitializer::IntegerVersion(); // No Qt
|
if (res.second == 0) {
|
||||||
}
|
// No specific version was requested by the target:
|
||||||
|
// Use highest known Qt version.
|
||||||
// Pick a version from the known versions:
|
res.first = knownQtVersions.at(0);
|
||||||
auto targetVersion = CharPtrToInt(
|
} else {
|
||||||
target->GetLinkInterfaceDependentStringProperty("QT_MAJOR_VERSION", ""));
|
// Pick a version from the known versions:
|
||||||
|
for (auto it : knownQtVersions) {
|
||||||
if (targetVersion == 0) {
|
if (it.Major == res.second) {
|
||||||
// No specific version was requested by the target:
|
res.first = it;
|
||||||
// Use highest known Qt version.
|
break;
|
||||||
return knownQtVersions.at(0);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto it : knownQtVersions) {
|
|
||||||
if (it.Major == targetVersion) {
|
|
||||||
return it;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
// Requested version was not found
|
|
||||||
return cmQtAutoGenInitializer::IntegerVersion();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<bool, std::string> GetQtExecutable(
|
std::pair<bool, std::string> GetQtExecutable(
|
||||||
|
@@ -11,6 +11,7 @@
|
|||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class cmGeneratorTarget;
|
class cmGeneratorTarget;
|
||||||
@@ -76,7 +77,9 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static IntegerVersion GetQtVersion(cmGeneratorTarget const* target);
|
/// @return The detected Qt version and the required Qt major version
|
||||||
|
static std::pair<IntegerVersion, unsigned int> GetQtVersion(
|
||||||
|
cmGeneratorTarget const* target);
|
||||||
|
|
||||||
cmQtAutoGenInitializer(cmQtAutoGenGlobalInitializer* globalInitializer,
|
cmQtAutoGenInitializer(cmQtAutoGenGlobalInitializer* globalInitializer,
|
||||||
cmGeneratorTarget* target,
|
cmGeneratorTarget* target,
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
AUTOGEN: No valid Qt version found for target main. AUTOMOC, AUTOUIC and
|
AUTOGEN: No valid Qt version found for target main. AUTOMOC, AUTOUIC and
|
||||||
AUTORCC disabled. Consider adding:
|
AUTORCC disabled. Consider adding:
|
||||||
|
|
||||||
find_package\(Qt5 COMPONENTS Widgets\)
|
find_package\(Qt<QTVERSION> COMPONENTS Widgets\)
|
||||||
|
|
||||||
to your CMakeLists.txt file.
|
to your CMakeLists.txt file.
|
||||||
This warning is for project developers. Use -Wno-dev to suppress it.
|
This warning is for project developers. Use -Wno-dev to suppress it.
|
||||||
|
Reference in New Issue
Block a user