1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 02:08:27 +08:00

Autogen: Fix and extend SKIP_AUTOMOC test

This commit is contained in:
Sebastian Holtermann
2017-08-22 19:09:50 +02:00
parent 727247c316
commit 13bb716f04
5 changed files with 59 additions and 4 deletions

View File

@@ -114,16 +114,27 @@ target_compile_features(empty PRIVATE ${QT_COMPILE_FEATURES})
# -- Test
# Test for SKIP_AUTOMOC and SKIP_AUTOGEN on an AUTOMOC enabled target
if(ALLOW_WRAP_CPP)
# Generate header mocs manually
qtx_wrap_cpp(skipMocWrapMoc
skipSource/qItemA.hpp
skipSource/qItemB.hpp)
skipSource/qItemB.hpp
skipSource/qItemC.hpp
skipSource/qItemD.hpp
)
set(skipMocSources
skipMoc.cpp
skipSource/qItemA.cpp
skipSource/qItemB.cpp
skipSource/qItemC.cpp)
skipSource/qItemC.cpp
skipSource/qItemD.cpp
)
# When cpp files are skipped, the hpp won't be processed either,
# unless they are mentioned in the sources - which they aren't.
set_property(SOURCE skipSource/qItemA.cpp PROPERTY SKIP_AUTOMOC ON)
set_property(SOURCE skipSource/qItemB.cpp PROPERTY SKIP_AUTOGEN ON)
# When hpp files are skipped, the cpp still get processed.
set_property(SOURCE skipSource/qItemC.hpp PROPERTY SKIP_AUTOMOC ON)
set_property(SOURCE skipSource/qItemD.hpp PROPERTY SKIP_AUTOGEN ON)
# AUTOMOC enabled only
add_executable(skipMocA ${skipMocSources} ${skipMocWrapMoc})
set_property(TARGET skipMocA PROPERTY AUTOMOC ON)

View File

@@ -2,12 +2,14 @@
#include "skipSource/qItemA.hpp"
#include "skipSource/qItemB.hpp"
#include "skipSource/qItemC.hpp"
#include "skipSource/qItemD.hpp"
int main(int, char**)
{
QItemA itemA;
QItemA itemB;
QItemA itemC;
QItemB itemB;
QItemC itemC;
QItemD itemD;
// Fails to link if the symbol is not present.
return 0;

View File

@@ -1,5 +1,17 @@
#include "qItemC.hpp"
class QItemC_Local : public QObject
{
Q_OBJECT
public:
QItemC_Local(){};
~QItemC_Local(){};
};
void QItemC::go()
{
QItemC_Local localObject;
}
// We need AUTOMOC processing
#include "qItemC.moc"

View File

@@ -0,0 +1,17 @@
#include "qItemD.hpp"
class QItemD_Local : public QObject
{
Q_OBJECT
public:
QItemD_Local(){};
~QItemD_Local(){};
};
void QItemD::go()
{
QItemD_Local localObject;
}
// We need AUTOMOC processing
#include "qItemD.moc"

View File

@@ -0,0 +1,13 @@
#ifndef QITEMD_HPP
#define QITEMD_HPP
#include <QObject>
class QItemD : public QObject
{
Q_OBJECT
Q_SLOT
void go();
};
#endif