我有一个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
CMake的有利于传递的完整路径链接库,所以假设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)
如果你不希望包括完整路径,你可以做
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/)