[CMake] cmake-qt: controlling includes order

Bill Somerville bill at classdesign.com
Tue Jun 30 20:17:35 EDT 2015


On 30/06/2015 22:28, Stephen Kelly wrote:

Hi Steve,

thanks for looking at this.
> Bill Somerville wrote:
>
>> Any ideas how I can control the ordering or reorder the
>> TARGET_INCLUDE_DIRECTORIES property?
>
>   add_executable(hello main.cpp)
>   target_link_libraries(hello Qt5::Widgets)
>   target_include_directories(
>     $<TARGET_PROPERTY:Qt5::Widgets,INTERFACE_INCLUDE_DIRECTORIES>
>     ${otherIncludes}
>   )
OK, so that doesn't work but the following does:

add_executable(hello main.cpp)
target_link_libraries(hello Qt5::Widgets Qt5::Network ${other_LIBRARIES})
target_include_directories( hello PRIVATE
$<TARGET_PROPERTY:Qt5::Widgets,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Qt5::Network,INTERFACE_INCLUDE_DIRECTORIES>
     ${other_INCLUDE_DIRS}
)

Note that every top level Qt5 include directory property used has to be 
mentioned. This is pretty painful given the intent is simply to put 
${other_INCLUDE_DIRS} at the end of the list. Also this is all due to a 
Mac issue where having MacPorts Qt4 installed causes it to be pulled in 
when some other MacPorts library is used, in this case FFTW3. Most of 
our developers work on Windows and Linux and are not going to know that 
this abomination is required to stop the Mac build breaking.

I see target_include_directories() has a BEFORE option but no AFTER 
option, I would have thought that is necessary to be the equivalent of 
he directory level include_directories() command.

It would also help to understand how the Qt5 include directories get 
added when they are not specified at all, i.e. when something like:

add_executable(hello main.cpp)
target_link_libraries(hello Qt5::Widgets)

is used alone.
>
> Thanks,
>
> Steve.
>
Regards
Bill.


More information about the CMake mailing list