diff options
author | Brad King <brad.king@kitware.com> | 2023-06-01 15:19:02 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-06-01 15:19:19 (GMT) |
commit | f6435f799ea7aa6669b035fee2a0559040890d27 (patch) | |
tree | bbbf240c1da7f73bf0ab4380fa814c5fb592bb7b | |
parent | 99e80ea0ac2de2e0c24652c2af8589967996a0d4 (diff) | |
parent | 1f4b374d6e936960d902307bc9dcd4e8d93168e2 (diff) | |
download | CMake-f6435f799ea7aa6669b035fee2a0559040890d27.zip CMake-f6435f799ea7aa6669b035fee2a0559040890d27.tar.gz CMake-f6435f799ea7aa6669b035fee2a0559040890d27.tar.bz2 |
Merge topic 'automoc-moc-options-test'
1f4b374d6e cmQtAutoGenInitializer: Reduce string copies
b6f66b445a cmQtAutoGenInitializer: Remove no-op calls
55d93bdabf cmQtAutoGenInitializer: Improve const correctness
feb56a666f cmTarget: Improve const correctness of AddUtility
5e513e562f Help: Add AUTOMOC_MOC_OPTIONS example
5380ad9d58 Tests: Add test for AUTOMOC_MOC_OPTIONS
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !8523
-rw-r--r-- | Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst | 36 | ||||
-rw-r--r-- | Source/cmQtAutoGenInitializer.cxx | 14 | ||||
-rw-r--r-- | Source/cmTarget.cxx | 3 | ||||
-rw-r--r-- | Source/cmTarget.h | 2 | ||||
-rw-r--r-- | Tests/QtAutogen/MocOptions2/CMakeLists.txt | 10 | ||||
-rw-r--r-- | Tests/QtAutogen/MocOptions2/main.cpp | 7 | ||||
-rw-r--r-- | Tests/QtAutogen/MocOptions2/object.cpp | 5 | ||||
-rw-r--r-- | Tests/QtAutogen/MocOptions2/object.hpp | 15 | ||||
-rw-r--r-- | Tests/QtAutogen/Tests.cmake | 1 |
9 files changed, 82 insertions, 11 deletions
diff --git a/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst b/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst index 330849b..11ab147 100644 --- a/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst +++ b/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst @@ -15,3 +15,39 @@ is created, or an empty string otherwise. See the :manual:`cmake-qt(7)` manual for more information on using CMake with Qt. + +EXAMPLE +^^^^^^^ + +In this example, the ``moc`` tool is invoked with the ``-D_EXTRA_DEFINE`` +option when generating the moc file for ``object.cpp``. + +``CMakeLists.txt`` + .. code-block:: cmake + + add_executable(mocOptions object.cpp main.cpp) + set_property(TARGET mocOptions PROPERTY AUTOMOC ON) + target_compile_options(mocOptions PRIVATE "-D_EXTRA_DEFINE") + set_property(TARGET mocOptions PROPERTY AUTOMOC_MOC_OPTIONS "-D_EXTRA_DEFINE") + target_link_libraries(mocOptions Qt6::Core) + +``object.hpp`` + .. code-block:: c++ + + #ifndef Object_HPP + #define Object_HPP + + #include <QObject> + + #ifdef _EXTRA_DEFINE + class Object : public QObject + { + Q_OBJECT + public: + + Object(); + + }; + #endif + + #endif diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index 2c48e78..c9f65f6 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -1381,29 +1381,25 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() // '_autogen' target. const auto timestampTargetName = cmStrCat(this->GenTarget->GetName(), "_autogen_timestamp_deps"); - std::vector<std::string> timestampTargetProvides; - cmCustomCommandLines timestampTargetCommandLines; // Add additional autogen target dependencies to // '_autogen_timestamp_deps'. for (const cmTarget* t : this->AutogenTarget.DependTargets) { std::string depname = t->GetName(); if (t->IsImported()) { - auto ttype = t->GetType(); + auto const ttype = t->GetType(); if (ttype == cmStateEnums::TargetType::STATIC_LIBRARY || ttype == cmStateEnums::TargetType::SHARED_LIBRARY || ttype == cmStateEnums::TargetType::UNKNOWN_LIBRARY) { depname = cmStrCat("$<TARGET_LINKER_FILE:", t->GetName(), ">"); } } - dependencies.push_back(depname); + dependencies.emplace_back(std::move(depname)); } auto cc = cm::make_unique<cmCustomCommand>(); cc->SetWorkingDirectory(this->Dir.Work.c_str()); - cc->SetByproducts(timestampTargetProvides); cc->SetDepends(dependencies); - cc->SetCommandLines(timestampTargetCommandLines); cc->SetEscapeOldStyle(false); cmTarget* timestampTarget = this->LocalGen->AddUtilityCommand( timestampTargetName, true, std::move(cc)); @@ -1478,7 +1474,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() } if (!useNinjaDepfile) { // Add additional autogen target dependencies to autogen target - for (cmTarget* depTarget : this->AutogenTarget.DependTargets) { + for (cmTarget const* depTarget : this->AutogenTarget.DependTargets) { autogenTarget->AddUtility(depTarget->GetName(), false, this->Makefile); } } @@ -2002,7 +1998,7 @@ static cmQtAutoGen::IntegerVersion parseMocVersion(std::string str) cmQtAutoGen::IntegerVersion result; static const std::string prelude = "moc "; - size_t pos = str.find(prelude); + size_t const pos = str.find(prelude); if (pos == std::string::npos) { return result; } @@ -2120,7 +2116,7 @@ cmQtAutoGenInitializer::GetQtVersion(cmGeneratorTarget const* target, res.first = knownQtVersions.at(0); } else { // Pick a version from the known versions: - for (auto it : knownQtVersions) { + for (auto const& it : knownQtVersions) { if (it.Major == res.second) { res.first = it; break; diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 4025967..81497f5 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1210,7 +1210,8 @@ void cmTarget::SetLanguageStandardProperty(std::string const& lang, languageStandardProperty.Backtraces.emplace_back(featureBacktrace); } -void cmTarget::AddUtility(std::string const& name, bool cross, cmMakefile* mf) +void cmTarget::AddUtility(std::string const& name, bool cross, + cmMakefile const* mf) { this->impl->Utilities.insert(BT<std::pair<std::string, bool>>( { name, cross }, mf ? mf->GetBacktrace() : cmListFileBacktrace())); diff --git a/Source/cmTarget.h b/Source/cmTarget.h index ac6d130..2d12a70 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -174,7 +174,7 @@ public: * commands. It is not a full path nor does it have an extension. */ void AddUtility(std::string const& name, bool cross, - cmMakefile* mf = nullptr); + cmMakefile const* mf = nullptr); void AddUtility(BT<std::pair<std::string, bool>> util); //! Get the utilities used by this target std::set<BT<std::pair<std::string, bool>>> const& GetUtilities() const; diff --git a/Tests/QtAutogen/MocOptions2/CMakeLists.txt b/Tests/QtAutogen/MocOptions2/CMakeLists.txt new file mode 100644 index 0000000..c664f4d --- /dev/null +++ b/Tests/QtAutogen/MocOptions2/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.16) +project(MocOptions2) +include("../AutogenCoreTest.cmake") + +# Test extra options passed to moc via AUTOMOC_MOC_OPTIONS +add_executable(mocOptions object.cpp main.cpp) +set_property(TARGET mocOptions PROPERTY AUTOMOC ON) +target_compile_options(mocOptions PRIVATE "-D_EXTRA_DEFINE") +set_property(TARGET mocOptions PROPERTY AUTOMOC_MOC_OPTIONS "-D_EXTRA_DEFINE") +target_link_libraries(mocOptions ${QT_LIBRARIES}) diff --git a/Tests/QtAutogen/MocOptions2/main.cpp b/Tests/QtAutogen/MocOptions2/main.cpp new file mode 100644 index 0000000..98875f0 --- /dev/null +++ b/Tests/QtAutogen/MocOptions2/main.cpp @@ -0,0 +1,7 @@ +#include "object.hpp" + +int main() +{ + Object object; + return 0; +} diff --git a/Tests/QtAutogen/MocOptions2/object.cpp b/Tests/QtAutogen/MocOptions2/object.cpp new file mode 100644 index 0000000..7960736 --- /dev/null +++ b/Tests/QtAutogen/MocOptions2/object.cpp @@ -0,0 +1,5 @@ +#include "object.hpp" + +Object::Object() +{ +} diff --git a/Tests/QtAutogen/MocOptions2/object.hpp b/Tests/QtAutogen/MocOptions2/object.hpp new file mode 100644 index 0000000..0bb4e81 --- /dev/null +++ b/Tests/QtAutogen/MocOptions2/object.hpp @@ -0,0 +1,15 @@ +#ifndef Object_HPP +#define Object_HPP + +#include <QObject> + +#ifdef _EXTRA_DEFINE +class Object : public QObject +{ + Q_OBJECT +public: + Object(); +}; +#endif + +#endif diff --git a/Tests/QtAutogen/Tests.cmake b/Tests/QtAutogen/Tests.cmake index 7dd9c84..d676abd 100644 --- a/Tests/QtAutogen/Tests.cmake +++ b/Tests/QtAutogen/Tests.cmake @@ -12,6 +12,7 @@ ADD_AUTOGEN_TEST(ManySources manySources) ADD_AUTOGEN_TEST(MocInterfaceMacroNames) ADD_AUTOGEN_TEST(MocOnly mocOnly) ADD_AUTOGEN_TEST(MocOptions mocOptions) +ADD_AUTOGEN_TEST(MocOptions2) ADD_AUTOGEN_TEST(ObjectLibrary someProgram) ADD_AUTOGEN_TEST(Parallel parallel) ADD_AUTOGEN_TEST(Parallel1 parallel1) |