Previously, GetIncludeDirectories was called before calling target->AddSourceFile(mocCppSource). Since commit a1c4905f (Use the link information as a source of compile definitions and includes., 2013-02-12), the include directories are determined by the link information. Valid link information requires that the linker language can be determined, which depends on the source files languages and the dependent targets languages. In the case of the no_link_languages target in the unit test, there are no dependencies and the additional source file no_link_languages_automoc.cpp is added to the target at generate-time. That file can be used to determine the linker language, but it must be added to the target before calling GetIncludeDirectories.
47 lines
1.6 KiB
CMake
47 lines
1.6 KiB
CMake
cmake_minimum_required(VERSION 2.8)
|
|
|
|
project(QtAutomoc)
|
|
|
|
find_package(Qt4 REQUIRED)
|
|
|
|
include(UseQt4)
|
|
|
|
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)
|
|
|
|
# create an executable and two library targets, each requiring automoc:
|
|
add_library(codeeditorLib STATIC codeeditor.cpp)
|
|
|
|
add_library(privateSlot OBJECT private_slot.cpp)
|
|
|
|
add_executable(foo main.cpp calwidget.cpp foo.cpp blub.cpp bar.cpp abc.cpp
|
|
xyz.cpp yaf.cpp $<TARGET_OBJECTS:privateSlot>)
|
|
|
|
set_target_properties(foo 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_BUILD_INTERFACE_INCLUDES 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(foo codeeditorLib ${QT_LIBRARIES} libC)
|
|
|
|
add_library(empty STATIC empty.cpp)
|
|
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)
|