[cmake-developers] Should a module attempt to find its own dependencies?

Stephen Kelly steveire at gmail.com
Sun Jan 8 13:05:26 EST 2012


Alexander Neundorf wrote:

> On Sunday 08 January 2012, Stephen Kelly wrote:
>> Hi,
>> 
>> I don't think I've ever seen a direct answer to this question.
> 
> AFAIK, yes, they should.
> FindKDE4Internal.cmake finds Qt, FindPNG.cmake finds zlib.
> 
> 
>> Is it something to be decided on a case by case basis? If so, then why is
>> there no general case?
>> 
>> I can see a possible reason that it is not solvable in the general case
>> because sometimes the behaviour of find_package can be changed by setting
>> variables (eg, one might use QT_USE_QTXMLPATTERNS before finding Qt4).
>> 
>> Specifically this comes up for me because I need to know whether Qt5
>> modules should find their own dependencies. That is, should
>> 
>> find_package(Qt5Gui)
>> 
>> cause
>> 
>> find_package(Qt5Core REQUIRED)
>> 
>> to be called or not?
> 
> I'd say yes.
> Otherwise the imported targets in Qt5Gui will depend on not yet defined
> targets from Qt5Core.
> 
> The same way cmake takes care of adding the required additional libraries
> to the link line (like adding zlib when linking libpng), it should also
> take care of this, IMO.
> 
> You should just have to state
> find_package(Foo)
> and this will get you Foo.

That implies that 

* Qt5Gui_INCLUDE_DIRS should also contain Qt5Core_INCLUDE_DIRS

* Qt5Gui_DEFINITIONS should contain Qt5Core_DEFINITIONS

* Qt5Gui_COMPILE_DEFINITIONS should contain Qt5Core_COMPILE_DEFINITIONS

Right? 

(for the libraries, the dependencies are already part of the link 
dependencies variable).

Otherwise you would be doing this:

find_package(Foo)
include_directories(
  ${Foo_INCLUDE_DIRS}
  ${Bar_INCLUDE_DIRS} # Where does this come from ??
)

Thanks,

Steve.





More information about the cmake-developers mailing list