[CMake] LINK_LIBRARIES() does not respect SUFFIX/PREFIX

Kishore, Jonnalagadda (IE10) Kishore.Jonnalagadda at honeywell.com
Thu Mar 22 00:45:20 EST 2007


> >
> > My setup:
> >
> > Project/CMakeLists.txt:
> >
> > ADD_SUBDIRECTORY(dir)
> > LINK_LIBRARIES(mylib)
> >
> > ADD_EXECUTABLE(myexec main.c)
> >
> > Project/dir/CMakeLists.txt:
> >
> > ADD_LIBRARY(mylib lib.c)
> >
> > SET_TARGET_PROPERTIES(mylib
> > 					  PROPERTIES
> > 					  PREFIX lib
> > 					  SUFFIX .a)
> >
> > Now while building myexec I get a link error "cannot find
> > -llibmylib.a.lib". When I do not explicitly set the prefix and
suffix,
> I
> > still get the error "cannot find -lmylib.lib". It links fine if I go
> and
> > rename the library file in the build directory.
> >
> > How do I solve this problem? Why is the .lib being appended in the
> call
> > to the linker?
> 
> Forgot to mention. I did try using TARGET_LINK_LIBRARIES() instead of
> LINK_LIBRARIES() to the same effect.
>

This problem is now solved. For anyone else facing this with
crosscompiling here are is what I did. In the top level CMakeLists.txt I
put in the following:

PROJECT(myProj)

SET(CMAKE_STATIC_LIBRARY_PREFIX "lib")
SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
SET(CMAKE_EXECUTABLE_SUFFIX ".elf")

Some of my leqrnings;
1) The prefix and suffix information must and should be placed after
declaring the project. If it is put before, then it gets overwritten
when project is declared. Can any of the developers throw more light on
the various effects that declaring a project has?

2) When cross-compiling, the CMAKE_C_COMPILER and CMAKE_CXX_COMPILER
must be set *before* declaring the project. It gets *committed* when a
project is declared and cannot be changed without deleting the build.

Warm regards,
Kishore


More information about the CMake mailing list