[CMake] Inconsistent lib dependancie/name for libnames with dots

Andreas Pakulat apaku at gmx.de
Sat Oct 23 10:12:21 EDT 2010


On 23.10.10 14:01:04, Bastian Moldenhauer wrote:
> I think I found a bug in cmake, but since I am a bloody beginner with cmake
> don't hit me when I am wrong.
 
Either you're wrong or your posted sample is :)

> If  I add a library using add_library(.) and the name of the lib contains a
> dot cmake will produce some wrong dependencies or use a wrong lib output
> name.
> 
> How to reproduce:
> 
> 1.       Create a folder "b"
> 
> 2.       Put a file "b.c" in "b"
> 
> 3.       Create a cmakelist with this content in "b"
> 
> FILE(GLOB src "*.c")
> 
> ADD_LIBRARY(b ${src})

Note that this line above creates a target called 'b' which will build a
library called "b.lib".

> 4.       Create a folder "e"
> 
> 5.       Put a file "e.c" in "e"
> 
> 6.       Create a cmakelist with this content in "e"
> 
> FILE(GLOB src "*.c")
> 
> ADD_EXECUTABLE(e ${src})
> 
> TARGET_LINK_LIBRARIES(e b.b)

This tries to link the target e against a target named 'b.b'. But this
target doesn't exist. Hence cmake assumes this is the name of a library
provided outside of the project and append ".lib" to it.

> 7.       In the parentfolder of "e" and "b" place a cmaklist with this
> content
> 
> cmake_minimum_required(VERSION 2.8)
> 
> project(Prj)
> 
> add_subdirectory(b)
> 
> add_subdirectory(e)
> 
>  
> 
> Result:
> 
> If you do the above and let cmake create the project files (vs2010 and
> vs2008 in my case) cmake will create a solution that want work. The reason
> is pretty simple. The executable will be dependent on a lib called b.b.lib
> which is correct. But the lib will never be created because project b.b will
> create a lib which is named "b.lib".

If you want to create a library called 'b.b' you should pass that as
target name to add_library. At least on unix this creates a correct
dependency.

Andreas

-- 
You will be audited by the Internal Revenue Service.


More information about the CMake mailing list