我如何告诉CMake的静态库的源目录链接?(How do I tell CMake to link

2019-07-17 16:25发布

我有一个Makefile一个小项目,我想转换为CMake的,大多只是为了获得与CMake的经验。 对于这个例子的目的,该项目包含一个源文件(C ++,虽然我不认为语言是尤为重要),并且我从其他地方拷贝一个静态库文件。 假设为了便于讨论的源代码库中不可用; 我只有某文件和相应的头。

我的手工制作的Makefile中包含此编译规则:

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)等,但没有到目前为止的结果在成功连接。 我应该怎么做?


版本细节:CMake的2.8.7在Linux(Kubuntu的12.04)与GCC 4.6.3

Answer 1:

CMake的有利于传递的完整路径链接库,所以假设libbingitup.a是${CMAKE_SOURCE_DIR} ,执行以下步骤应该成功:

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


Answer 2:

我发现这很有帮助...

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)


Answer 3:

如果你不希望包括完整路径,你可以做

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

bingitup是同一个名字你给的目标,如果你创建一个项目的CMake静态库:

add_library(bingitup STATIC bingitup.cpp)

CMake的自动添加lib.a在Linux的前面, .lib在Windows上的结束。

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

link_directories(/path/to/libraries/)


文章来源: How do I tell CMake to link in a static library in the source directory?