[CMake] cmake-qt: controlling includes order

Stephen Kelly steveire at gmail.com
Wed Jul 8 14:55:38 EDT 2015


Bill Somerville wrote:

> 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.

Yes, I've hit this issue before too. I filed 

 http://public.kitware.com/Bug/view.php?id=15643
 
to track it.

> 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
> the 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.

In this case:

 add_executable(hello main.cpp)
 target_include_directories(hello PRIVATE /opt/foo)
 target_link_libraries(hello Qt5::Widgets)
 target_include_directories(hello PRIVATE /opt/bar)

the order will be 

 -I/opt/foo -I/opt/bar -I/opt/qt5/include/Qt5Widgets etc...

When generating the list of directories to include, the ordered contents of 
the INCLUDE_DIRECTORIES property is processed first, and after that, the 
include directories of any ordered linked targets are appended. The ordering 
is the order of each different set of commands.

Hope that helps. If you think the documentation can be clarified here, 
please contribute a patch, possibly to the cmake-buildsystem manual.

Thanks,

Steve.




More information about the CMake mailing list