⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.94
Server IP:
178.33.27.10
Server:
Linux cpanel.dev-unit.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
Server Software:
Apache/2.4.62 (Unix) OpenSSL/1.0.2k-fips
PHP Version:
8.2.11
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
cmake3
/
Help
/
prop_tgt
/
View File Name :
AUTOMOC_DEPEND_FILTERS.rst
AUTOMOC_DEPEND_FILTERS ---------------------- Filter definitions used by :prop_tgt:`AUTOMOC` to extract file names from a source file that are registered as additional dependencies for the ``moc`` file of the source file. Filters are defined as ``KEYWORD;REGULAR_EXPRESSION`` pairs. First the file content is searched for ``KEYWORD``. If it is found at least once, then file names are extracted by successively searching for ``REGULAR_EXPRESSION`` and taking the first match group. The file name found in the first match group is searched for - first in the vicinity of the source file - and afterwards in the target's :prop_tgt:`INCLUDE_DIRECTORIES`. If any of the extracted files changes, then the ``moc`` file for the source file gets rebuilt even when the source file itself doesn't change. If any of the extracted files is :prop_sf:`GENERATED` or if it is not in the target's sources, then it might be necessary to add it to the ``_autogen`` target dependencies. See :prop_tgt:`AUTOGEN_TARGET_DEPENDS` for reference. By default :prop_tgt:`AUTOMOC_DEPEND_FILTERS` is initialized from :variable:`CMAKE_AUTOMOC_DEPEND_FILTERS`, which is empty by default. From Qt 5.15.0 on this variable is ignored as moc is able to output the correct dependencies. See the :manual:`cmake-qt(7)` manual for more information on using CMake with Qt. Example 1 ^^^^^^^^^ A header file ``my_class.hpp`` uses a custom macro ``JSON_FILE_MACRO`` which is defined in an other header ``macros.hpp``. We want the ``moc`` file of ``my_class.hpp`` to depend on the file name argument of ``JSON_FILE_MACRO``:: // my_class.hpp class My_Class : public QObject { Q_OBJECT JSON_FILE_MACRO ( "info.json" ) ... }; In ``CMakeLists.txt`` we add a filter to :variable:`CMAKE_AUTOMOC_DEPEND_FILTERS` like this:: list( APPEND CMAKE_AUTOMOC_DEPEND_FILTERS "JSON_FILE_MACRO" "[\n][ \t]*JSON_FILE_MACRO[ \t]*\\([ \t]*\"([^\"]+)\"" ) We assume ``info.json`` is a plain (not :prop_sf:`GENERATED`) file that is listed in the target's source. Therefore we do not need to add it to :prop_tgt:`AUTOGEN_TARGET_DEPENDS`. Example 2 ^^^^^^^^^ In the target ``my_target`` a header file ``complex_class.hpp`` uses a custom macro ``JSON_BASED_CLASS`` which is defined in an other header ``macros.hpp``:: // macros.hpp ... #define JSON_BASED_CLASS(name, json) \ class name : public QObject \ { \ Q_OBJECT \ Q_PLUGIN_METADATA(IID "demo" FILE json) \ name() {} \ }; ... :: // complex_class.hpp #pragma once JSON_BASED_CLASS(Complex_Class, "meta.json") // end of file Since ``complex_class.hpp`` doesn't contain a ``Q_OBJECT`` macro it would be ignored by :prop_tgt:`AUTOMOC`. We change this by adding ``JSON_BASED_CLASS`` to :variable:`CMAKE_AUTOMOC_MACRO_NAMES`:: list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "JSON_BASED_CLASS") We want the ``moc`` file of ``complex_class.hpp`` to depend on ``meta.json``. So we add a filter to :variable:`CMAKE_AUTOMOC_DEPEND_FILTERS`:: list(APPEND CMAKE_AUTOMOC_DEPEND_FILTERS "JSON_BASED_CLASS" "[\n^][ \t]*JSON_BASED_CLASS[ \t]*\\([^,]*,[ \t]*\"([^\"]+)\"" ) Additionally we assume ``meta.json`` is :prop_sf:`GENERATED` which is why we have to add it to :prop_tgt:`AUTOGEN_TARGET_DEPENDS`:: set_property(TARGET my_target APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "meta.json")