Библиотека требует сборки в объектный файл (из-за moc)

This commit is contained in:
2020-06-28 09:52:03 +03:00
parent ca83f98484
commit a4d00ed80b
21 changed files with 84 additions and 271 deletions

View File

@ -26,47 +26,38 @@ set(TRGT_headers ${TRGT_moc_hpp} ${TRGT_hpp})
qt5_wrap_cpp(TRGT_moc_cpp ${TRGT_moc_private_hpp} ${TRGT_moc_hpp})
add_library(${TRGT}-header-only INTERFACE)
target_include_directories(
${TRGT}-header-only SYSTEM INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
add_common_library(${TRGT} OUTPUT_NAME myx-${TRGT} SOURCES ${TRGT_cpp} ${TRGT_moc_cpp}
${TRGT_moc_private_hpp} ${TRGT_headers})
common_target_properties(${TRGT})
if(MYXLIB_BUILD_LIBRARIES)
add_common_library(${TRGT} OUTPUT_NAME myx-${TRGT} SOURCES ${TRGT_cpp} ${TRGT_moc_cpp} ${TRGT_moc_private_hpp} ${TRGT_headers})
common_target_properties(${TRGT})
# Создание цели для проверки утилитой clang-tidy
add_clang_tidy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers})
# Создание цели для проверки утилитой clang-tidy
add_clang_tidy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers})
# Создание цели для проверки утилитой clang-analyze
add_clang_analyze_check(${TRGT} ${TRGT_cpp} ${TRGT_headers})
# Создание цели для проверки утилитой clang-analyze
add_clang_analyze_check(${TRGT} ${TRGT_cpp} ${TRGT_headers})
# Создание цели для проверки утилитой clazy
add_clazy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers})
# Создание цели для проверки утилитой clazy
add_clazy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers})
# Создание цели для проверки утилитой pvs-studio
add_pvs_check(${TRGT})
# Создание цели для проверки утилитой pvs-studio
add_pvs_check(${TRGT})
# Создание цели для автоматического форматирования кода
add_format_sources(${TRGT} ${TRGT_cpp} ${TRGT_headers} ${TRGT_moc_private_hpp})
# Создание цели для автоматического форматирования кода
add_format_sources(${TRGT} ${TRGT_cpp} ${TRGT_headers} ${TRGT_moc_private_hpp})
target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
target_include_directories(${TRGT} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src)
target_include_directories(${TRGT} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
cotire(${TRGT})
target_compile_definitions(${TRGT} PUBLIC MYXLIB_BUILD_LIBRARIES)
target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
target_include_directories(${TRGT} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src)
target_include_directories(${TRGT} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
cotire(${TRGT})
install(TARGETS ${TRGT}_static COMPONENT libs-dev ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
if(BUILD_SHARED_LIBS)
install(TARGETS ${TRGT}_shared COMPONENT main LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
else()
install(FILES ${TRGT_cpp} COMPONENT base-dev DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${TRGT})
install(TARGETS ${TRGT}_static COMPONENT libs-dev ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
if(BUILD_SHARED_LIBS)
install(TARGETS ${TRGT}_shared COMPONENT main LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
generate_pkgconfig(myx-${TRGT} COMPONENT base-dev INSTALL_LIBRARY ${MYXLIB_BUILD_LIBRARIES})
install(FILES ${TRGT_headers} COMPONENT base-dev DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${TRGT})
install(FILES ${TRGT_headers} COMPONENT base-dev
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${TRGT})
# Цель, используемая только для установки заголовочных файлов без компиляции проекта
add_custom_target(${TRGT}-install-headers COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=base-dev -P

View File

@ -3,19 +3,14 @@
#include <myx/base/config.hpp>
#ifndef MYXLIB_HEADER_ONLY
#include <myx/qt/posix_signal_watcher_p.hpp>
#include <myx/qt/posix_signal_watcher.hpp>
#else
#pragma once
#endif
#include <myx/qt/posix_signal_watcher_p.hpp>
namespace myx {
namespace qt {
int PosixSignalWatcherPrivate::m_sockpair[2] = {0, 0};
std::array< int, 2 > PosixSignalWatcherPrivate::mSockpair = { 0, 0 };
PosixSignalWatcherPrivate::~PosixSignalWatcherPrivate() = default;
@ -24,7 +19,7 @@ PosixSignalWatcherPrivate::PosixSignalWatcherPrivate( PosixSignalWatcher* q ) :
{
#if MYX_QT_HAS_POSIX_SIGNALS
// Create socket pair
if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, m_sockpair ) )
if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, mSockpair.data() ) != 0 )
{
qDebug() << "PosixSignalWatcher: socketpair: " << ::strerror( errno );
return;
@ -32,7 +27,7 @@ PosixSignalWatcherPrivate::PosixSignalWatcherPrivate( PosixSignalWatcher* q ) :
#endif
// Create a notifier for the read end of the pair
m_notifier.reset( new QSocketNotifier( m_sockpair[1], QSocketNotifier::Read ) );
m_notifier.reset( new QSocketNotifier( mSockpair[1], QSocketNotifier::Read ) );
// Called when the signal handler has written to the socket pair.
@ -57,7 +52,7 @@ PosixSignalWatcherPrivate::PosixSignalWatcherPrivate( PosixSignalWatcher* q ) :
* This provides a way to break out of the asynchronous context from which the
* signal handler is called and back into the Qt event loop.
*/
void PosixSignalWatcherPrivate::watchForSignal( int signal )
MYXLIB_INLINE void PosixSignalWatcherPrivate::watchForSignal( int signal )
{
if ( m_watchedSignals.contains( signal ) )
{
@ -67,12 +62,12 @@ void PosixSignalWatcherPrivate::watchForSignal( int signal )
#if MYX_QT_HAS_POSIX_SIGNALS
// Register a sigaction which will write to the socket pair
struct sigaction sigact;
struct sigaction sigact {};
sigact.sa_handler = PosixSignalWatcherPrivate::signalHandler;
sigact.sa_flags = 0;
sigemptyset( &sigact.sa_mask );
sigact.sa_flags |= SA_RESTART;
if ( ::sigaction( signal, &sigact, nullptr ) )
if ( ::sigaction( signal, &sigact, nullptr ) != 0 )
{
qDebug() << "PosixSignalWatcher: sigaction: " << ::strerror( errno );
return;
@ -89,7 +84,7 @@ void PosixSignalWatcherPrivate::watchForSignal( int signal )
*/
MYXLIB_INLINE void PosixSignalWatcherPrivate::signalHandler( int signal )
{
(void)::write( m_sockpair[0], &signal, sizeof( signal ) );
(void)::write( mSockpair[0], &signal, sizeof( signal ) );
}

View File

@ -33,7 +33,7 @@ class PosixSignalWatcher : public QObject
public:
explicit PosixSignalWatcher( QObject* parent = nullptr );
~PosixSignalWatcher();
~PosixSignalWatcher() override;
void watchForSignal( int signal );
Q_SIGNAL void posixSignal( int signal );
@ -47,9 +47,4 @@ private:
} // namespace myx
#ifdef MYXLIB_HEADER_ONLY
#include "posix_signal_watcher_p.hpp"
#include "posix_signal_watcher.cpp"
#endif
#endif // ifndef MYX_QT_POSIX_SIGNAL_WATCHER_HPP_

View File

@ -1,8 +1,9 @@
#ifndef MYX_QT_POSIX_SIGNAL_WATCHER_P_HPP_
#define MYX_QT_POSIX_SIGNAL_WATCHER_P_HPP_
#include <myx/base/config.hpp>
#pragma once
#include <myx/base/config.hpp>
#include <myx/qt/posix_signal_watcher.hpp>
#include <QObject>
@ -47,10 +48,10 @@ public:
static void signalHandler( int signal );
private:
PosixSignalWatcher* const q_ptr = nullptr;
Q_DECLARE_PUBLIC( PosixSignalWatcher )
static int m_sockpair[2];
PosixSignalWatcher* const q_ptr = nullptr;
static std::array< int, 2 > mSockpair;
std::unique_ptr< QSocketNotifier > m_notifier;
QList< int > m_watchedSignals;
}; // class PosixSignalWatcherPrivate

View File

@ -2,12 +2,7 @@
#define MYX_QT_TRANSLATORS_CPP_
#include <myx/base/config.hpp>
#ifndef MYXLIB_HEADER_ONLY
#include <myx/qt/translators.hpp>
#else
#pragma once
#endif
#include <QCoreApplication>
#include <QLibraryInfo>

View File

@ -20,8 +20,4 @@ void append_translators( QTranslatorsList& translators, const QString& appName )
} // namespace myx
#ifdef MYXLIB_HEADER_ONLY
#include "translators.cpp"
#endif
#endif // ifndef MYX_QT_TRANSLATORS_HPP_