How do I tell CMake to link in a static library in the source directory?

David Z picture David Z · Dec 29, 2012 · Viewed 195.6k times · Source

I have a small project with a Makefile which I'm trying to convert to CMake, mostly just to get experience with CMake. For purposes of this example, the project contains a source file (C++, though I don't think the language is particularly relevant) and a static library file which I've copied from elsewhere. Assume for argument's sake that the source code to the library is unavailable; I only have the .a file and the corresponding header.

My handmade Makefile contains this build rule:

main: main.o libbingitup.a
    g++ -o main main.o libbingitup.a

which works fine. How do I tell CMake to reproduce this? Not literally this exact makefile, of course, but something that includes an equivalent linking command. I've tried the obvious but naive ways, like

add_executable(main main.cpp libbingitup.a)

or

add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)

as well as various things with link_directories(.) or add_library(bingitup STATIC IMPORTED) etc. but nothing so far that results in a successful linkage. What should I be doing?


Version details: CMake 2.8.7 on Linux (Kubuntu 12.04) with GCC 4.6.3

Answer

Fraser picture Fraser · Dec 29, 2012

CMake favours passing the full path to link libraries, so assuming libbingitup.a is in ${CMAKE_SOURCE_DIR}, doing the following should succeed:

add_executable(main main.cpp)
target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a)