Dav*_*d Z 74 cmake static-libraries
我有一个带有Makefile的小项目,我试图转换为CMake,主要是为了获得CMake的经验.出于此示例的目的,项目包含一个源文件(C++,虽然我认为该语言不是特别相关)和一个我从其他地方复制过的静态库文件.为了论证,假设库的源代码不可用; 我只有.a文件和相应的标题.
我手工制作的Makefile包含以下构建规则:
main: main.o libbingitup.a
g++ -o main main.o libbingitup.a
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.我如何告诉CMake重现这个?当然,这不是字面上的精确makefile,而是包含等效链接命令的东西.我尝试过明显但天真的方式,比如
add_executable(main main.cpp libbingitup.a)
Run Code Online (Sandbox Code Playgroud)
要么
add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)
Run Code Online (Sandbox Code Playgroud)
以及与各种事物link_directories(.)或add_library(bingitup STATIC IMPORTED)等,但没有到目前为止,结果在一个成功的连锁.我该怎么办?
版本详细信息:Linux(Kubuntu 12.04)上的CMake 2.8.7和GCC 4.6.3
Fra*_*ser 103
CMake倾向于将完整路径传递给链接库,因此假设libbingitup.a所在${CMAKE_SOURCE_DIR},执行以下操作应该会成功:
add_executable(main main.cpp)
target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a)
Run Code Online (Sandbox Code Playgroud)
Cri*_*ngo 22
如果您不想包含完整路径,则可以执行此操作
add_executable(main main.cpp)
target_link_libraries(main bingitup)
Run Code Online (Sandbox Code Playgroud)
bingitup 如果在CMake项目中创建静态库,则为目标提供相同的名称:
add_library(bingitup STATIC bingitup.cpp)
Run Code Online (Sandbox Code Playgroud)
CMake会自动在Linux上添加lib和添加.a到前端,.lib最后在Windows上添加.
如果库是外部的,您可能希望使用添加库的路径
link_directories(/path/to/libraries/)
Run Code Online (Sandbox Code Playgroud)
stu*_*stu 20
我觉得这很有帮助......
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
154432 次 |
| 最近记录: |