[CMake] CMake Error: Cannot determine link language for target "io".

Hendrik Sattler post at hendrik-sattler.de
Tue May 19 11:07:33 EDT 2009


Zitat von Mats Kindahl <mats at sun.com>:
>>> Ideally, I would like to copy or build the libraries in a central "lib/"
>>> directory similar to how I copy all the include files to the "include/"
>>> directory, but how is that supported by CMake?
>>
>> See
>> http://www.cmake.org/cmake/help/cmake2.6docs.html#variable:CMAKE_LIBRARY_OUTPUT_DIRECTORY
>>
>>
>> Or you use the INSTALL() directives to add the install target that you
>> can use to install the files into a wanted directory structure.
>
> Well... in this case, the libraries are only temporary and used   
> during the build of the final target.

So they are static libs? Then that doesn't matter.

>>> So, basically, each package can depend on a number of include files and
>>> libraries that have not yet been built, so somehow I need to specify
>>>  rules for how to build it all in a good order.
>>
>> Using target_link_libraries() already does this _if_ you defined the
>> library with add_library() _before_ using target_link_libraries. You
>> GLOB will apply alphabetic order. Don't use it if you need a specific
>> order. Use an explicit list instead.
>
> Well... in this case, I don't know the subdirectories that will be   
> used, nor the dependencies.

So you want to build something that you have no information about?

> Only the subsystems know what dependencies they have on other items, so
> therefore I would like to place the dependencies inside the packages, and the
> dependencies are on specific library files and header that are made available
> for other packages.
>
> I was somehow hoping that CMake would resolve the dependencies, as   
> long as they are provided, and create a proper build order for all the
> subsystems (assuming, of course, that the dependencies form a DAG).

But the add_library() and add_executable() calls but be in proper  
order to do so. The rest in done with target_link_library().

The problem is that target_link_library() takes both, library target  
names, full path to library files or base names of installed  
libraries. The first two are linked with full path, the latter is used  
with e.g. -lio.
Having 'io' as target is not enforced :-/
This implies the proper order of the add_*() calls.

You can do that with variables (like done with C/C++ header guards)  
and reference the libraries CMakeLists.txt files before using the  
targets declared there.

HS





More information about the CMake mailing list