|
|
|
cmake_minimum_required(VERSION 2.8.11)
|
|
|
|
|
|
|
|
project(QtAutogen)
|
|
|
|
|
|
|
|
if (QT_TEST_VERSION STREQUAL 4)
|
|
|
|
find_package(Qt4 REQUIRED)
|
|
|
|
|
|
|
|
# Include this directory before using the UseQt4 file.
|
|
|
|
add_subdirectory(defines_test)
|
|
|
|
|
|
|
|
include(UseQt4)
|
|
|
|
|
|
|
|
set(QT_QTCORE_TARGET Qt4::QtCore)
|
|
|
|
|
|
|
|
macro(qtx_wrap_cpp)
|
|
|
|
qt4_wrap_cpp(${ARGN})
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
else()
|
|
|
|
if (NOT QT_TEST_VERSION STREQUAL 5)
|
|
|
|
message(SEND_ERROR "Invalid Qt version specified.")
|
|
|
|
endif()
|
|
|
|
find_package(Qt5Widgets REQUIRED)
|
|
|
|
|
|
|
|
set(QT_QTCORE_TARGET Qt5::Core)
|
|
|
|
|
|
|
|
include_directories(${Qt5Widgets_INCLUDE_DIRS})
|
|
|
|
set(QT_LIBRARIES Qt5::Widgets)
|
|
|
|
|
|
|
|
if(Qt5_POSITION_INDEPENDENT_CODE)
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
macro(qtx_wrap_cpp)
|
|
|
|
qt5_wrap_cpp(${ARGN})
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
|
|
|
|
add_definitions(-DFOO -DSomeDefine="Barx")
|
|
|
|
|
|
|
|
# enable relaxed mode so automoc can handle all the special cases:
|
|
|
|
set(CMAKE_AUTOMOC_RELAXED_MODE TRUE)
|
|
|
|
|
|
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
|
|
|
|
# create an executable and two library targets, each requiring automoc:
|
|
|
|
add_library(codeeditorLib STATIC codeeditor.cpp)
|
|
|
|
|
|
|
|
add_library(privateSlot OBJECT private_slot.cpp)
|
|
|
|
|
|
|
|
add_custom_target(generate_moc_input
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/myinterface.h.in" "${CMAKE_CURRENT_BINARY_DIR}"
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E rename "${CMAKE_CURRENT_BINARY_DIR}/myinterface.h.in" "${CMAKE_CURRENT_BINARY_DIR}/myinterface.h"
|
|
|
|
)
|
|
|
|
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/myotherinterface.h"
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/myotherinterface.h.in" "${CMAKE_CURRENT_BINARY_DIR}/myotherinterface.h"
|
|
|
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/myotherinterface.h.in"
|
|
|
|
)
|
|
|
|
|
|
|
|
add_executable(QtAutogen main.cpp calwidget.cpp second_widget.cpp foo.cpp blub.cpp bar.cpp abc.cpp
|
|
|
|
xyz.cpp yaf.cpp gadget.cpp $<TARGET_OBJECTS:privateSlot>
|
|
|
|
test.qrc second_resource.qrc resourcetester.cpp generated.cpp
|
|
|
|
)
|
|
|
|
set_property(TARGET QtAutogen APPEND PROPERTY AUTOGEN_TARGET_DEPENDS generate_moc_input "${CMAKE_CURRENT_BINARY_DIR}/myotherinterface.h")
|
|
|
|
|
|
|
|
set_target_properties(QtAutogen codeeditorLib privateSlot PROPERTIES AUTOMOC TRUE)
|
|
|
|
|
|
|
|
include(GenerateExportHeader)
|
|
|
|
# The order is relevant here. B depends on A, and B headers depend on A
|
|
|
|
# headers both subdirectories use CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE and we
|
|
|
|
# test that CMAKE_AUTOMOC successfully reads the include directories
|
|
|
|
# for the build interface from those targets. There has previously been
|
|
|
|
# a bug where caching of the include directories happened before
|
|
|
|
# extracting the includes to pass to moc.
|
|
|
|
add_subdirectory(Bdir)
|
|
|
|
add_subdirectory(Adir)
|
|
|
|
add_library(libC SHARED libC.cpp)
|
|
|
|
set_target_properties(libC PROPERTIES AUTOMOC TRUE)
|
|
|
|
generate_export_header(libC)
|
|
|
|
target_link_libraries(libC LINK_PUBLIC libB)
|
|
|
|
|
|
|
|
target_link_libraries(QtAutogen codeeditorLib ${QT_LIBRARIES} libC)
|
|
|
|
|
|
|
|
# Add not_generated_file.qrc to the source list to get the file-level
|
|
|
|
# dependency, but don't generate a c++ file from it. Disable the AUTORCC
|
|
|
|
# feature for this target. This tests that qrc files in the sources don't
|
|
|
|
# have an effect on generation if AUTORCC is off.
|
|
|
|
add_library(empty STATIC empty.cpp not_generated_file.qrc)
|
|
|
|
set_target_properties(empty PROPERTIES AUTORCC OFF)
|
|
|
|
|
|
|
|
set_target_properties(empty PROPERTIES AUTOMOC TRUE)
|
|
|
|
target_link_libraries(empty no_link_language)
|
|
|
|
add_library(no_link_language STATIC empty.h)
|
|
|
|
set_target_properties(no_link_language PROPERTIES AUTOMOC TRUE)
|
|
|
|
|
|
|
|
qtx_wrap_cpp(uicOnlyMoc sub/uiconly.h)
|
|
|
|
add_executable(uiconly sub/uiconly.cpp ${uicOnlyMoc})
|
|
|
|
target_link_libraries(uiconly ${QT_LIBRARIES})
|