[Ctk-developers] org_commontk_dah_app depends on org_commontk_dah_core
Sascha Zelzer
s.zelzer at dkfz-heidelberg.de
Wed Aug 3 15:29:48 UTC 2011
On 08/03/2011 05:05 PM, Julien Finet wrote:
> On Wed, Aug 3, 2011 at 10:50 AM, Sascha Zelzer
> <s.zelzer at dkfz-heidelberg.de <mailto:s.zelzer at dkfz-heidelberg.de>> wrote:
>
> On 08/03/2011 04:29 PM, Julien Finet wrote:
>> On Wed, Aug 3, 2011 at 4:07 AM, Sascha Zelzer
>> <s.zelzer at dkfz-heidelberg.de
>> <mailto:s.zelzer at dkfz-heidelberg.de>> wrote:
>>
>> For plug-ins, dependencies to other plug-ins are encoded in
>> the manifest_headers.cmake file (instead of
>> target_libraries.cmake). This makes the information available
>> at runtime. The dependencies are already correctly set-up but
>> the order of the plug-ins in the CMakeLists.txt did not
>> reflect their dependencies. Multiple CMake configure runs hid
>> the problem and I fixed it just now.'
>>
>>
>> Do you mean that the dependency is now handled by the order of
>> add_subdirectory calls ?
> Well, the dependencies are still handled via the target_libraries
> and additionally for plug-ins via the manifest_headers.cmake
> files. However, the order of the add_subdirectory calls is
> important (both for Libs and Plug-ins) for automatically figuring
> out transitive include directories. A bit simplified, the macros
> look for a <plugin-dependency>_SRC_DIR variable which is
> automatically set by CMake due to the project(<plugin-dependency>)
> call in each plug-in (or lib). If the add_subdirectory order is
> wrong, those variables may not exist yet. This was the actual
> problem: org_commontk_dah_app was missing a the include directory
> to org_commontk_dah_core .
>
> Understood:
> the configure-time dependency of the 2 plugins is handled via the
> order of add_subdirectory calls.
> the build-time dependency of the 2 plugins is handled
> via manifest_headers.cmake.
> Makes sense, thanks for the clarification.
Correct.
> org_commontk_dah_app uses classes from org_commontk_dah_core (like
> the ctkSimpleSoapServer). It's object files can be built in
> parallel to the object files of org_commontk_dah_core, but the
> linking step will only take place after the org_commontk_dah_core
> import library has been created. Visual Studio takes care of that.
>
>
> Don't we have 2 kind of dependencies here ? At link-ing time (and I
> trust you that Visual Studio takes care of it if we told him
> so(manifest_headers.cmake)), but there is a prior dependency, at
> moc-ing time (so the error: *
> Undefined interface
> *). Would Visual Studio handle that as well ?
That error was actually a bit misleading. The C++ parser shipped with
"moc" does not complain if it cannot resolve an #include <...>
statement. Since the include directories were wrong (due to the wrong
configure-time dependency) the header file could not be included by moc
and hence it did not know about the "interface" declared in that header
file.
>
> Right now the CMake code for configuring plugins is directly in
> CTK/CMakeLists.txt. Wouldn't it make more sense to have it in
> CTK/Plugins/CMakeLists.txt (or some other CMakeLists.txt)?
>
We could move the creation of the CMake variable which contains the list
of plug-ins (and libs) to a separate file inside an appropriate
directory. However, this file must still be included in the top-level
CMakeLists.file due to the way the ctkMacroValidateBuildOptions macro works.
- Sascha
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/ctk-developers/attachments/20110803/03be3be5/attachment.htm>
More information about the Ctk-developers
mailing list