我如何告诉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/)