[CMake] How to specify library dependencies?

Michael Jackson mike.jackson at bluequartz.net
Mon Nov 24 17:02:04 EST 2008


On Nov 24, 2008, at 4:29 PM, Robert Dailey wrote:

> On Mon, Nov 24, 2008 at 2:41 PM, Michael Jackson <mike.jackson at bluequartz.net 
> > wrote:
> typically you do:
>
> add_executable(main  main.cpp)
> target_link_libraries(main a)
>
> and CMake _usually_ picks the correct library for the given platform  
> (a.lib, a.so, a.dylib... )
>
> Is that what you were asking?
>
> Yes, you did answer my question exactly, however I did not specify  
> the more complex issue.
>
> Some libraries we're using have different library names depending on  
> the platform. For example:
>
> a_windows.lib
> a_linux.o
>
> This is why I believed I would need the conditional logic. What  
> would you do in this case? Thanks for your help.
>


I guess it would depend on if those other libraries were being  
compiled in the same project as the current one.

Basically when you use target_link_libraries (EXE  [lib1] [lib2]... )

you need to supply everything between the platform prefix and the  
platform suffix.

So, if your library on Windows is a_windows.lib you would supply  
"a_windows". If your library is liba_linux.so then supply "a_linux" on  
linux.

So, in practice you have:

set(lib_a_name "a")
if (WINDOWS)
   set(lib_a_name "a_windows")
elseif(APPLE)
   set(lib_a_name "a_osx")
elseif(LINUX)
   set(lib_a_name "a_linux")
endif()


target_link_Libraries(exe ${lib_a_name})


_________________________________________________________
Mike Jackson                  mike.jackson at bluequartz.net
             www.bluequartz.net



More information about the CMake mailing list