我如何告诉CMake链接到源目录中的静态库中?

我有一个Makefile的小项目,我试图转换到CMake,主要是为了获得与CMake的经验。 对于这个例子来说,这个项目包含了一个源文件(C ++,虽然我不认为这个语言是特别相关的),还有一个我从其他地方复制过来的静态库文件。 假设参数的缘故,库的源代码不可用; 我只有.a文件和相应的标题。

我手工制作的Makefile包含这个构build规则:

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

这工作正常。 我如何告诉CMake重现这个? 不是字面意思,这个确切的makefile,当然,但包括一个等效的链接命令。 我尝试了一些显而易见的方式,比如说

 add_executable(main main.cpp libbingitup.a) 

要么

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

以及各种与link_directories(.)add_library(bingitup STATIC IMPORTED)等东西,但迄今没有任何事情,导致成功的联系。 我该怎么做?


版本细节:Linux上的CMake 2.8.7(Kubuntu 12.04)和GCC 4.6.3

CMake倾向于将完整path传递给链接库,所以假设libbingitup.a在${CMAKE_SOURCE_DIR} ,执行以下操作应该成功:

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

我发现这有帮助…

http://www.cmake.org/pipermail/cmake/2011-June/045222.html

从他们的例子:

 ADD_LIBRARY(boost_unit_test_framework STATIC IMPORTED) SET_TARGET_PROPERTIES(boost_unit_test_framework PROPERTIES IMPORTED_LOCATION /usr/lib/libboost_unit_test_framework.a) TARGET_LINK_LIBRARIES(mytarget A boost_unit_test_framework C) 

如果你不想包括完整的path,你可以做

 add_executable(main main.cpp) target_link_libraries(main bingitup) 

bingitup和你在CMake项目中创build静态库的目标是一样的:

 add_library(bingitup STATIC bingitup.cpp) 

CMake自动将lib.a到Linux的前端,而.lib最后在Windows上添加。

如果库是外部的,则可能需要使用添加path到库

 link_directories(/path/to/libraries/)