【问题标题】:cmake can't find my static libscmake 找不到我的静态库
【发布时间】:2017-03-15 16:23:36
【问题描述】:

我有这个目录结构:
├── 仓
├── 建造
├── 计算器
│   ├── 构建
│   ├── 计算器.c
│   └── CMakeLists.txt
├── CMakeLists.txt
├── 计算
│   ├── 构建
│   ├── CMakeLists.txt
│   ├── compcalc.c
│   └── compcalc.h
├── 包括
│   └── 计算器.h
├── 对象
│   ├── libcompcalc.a
│   └── libsimpcalc.a
├── 简单计算
│   ├── 构建
│   ├── CMakeLists.txt
│   ├── simpcalc.c
│   └── simpcalc.h

simpcalccompcalc 构建良好,运行“make install”后,文件被放入 /obj 目录。 但是当我尝试构建计算器时,出现以下错误:

/usr/bin/ld: cannot find -lsimpcalc
/usr/bin/ld: cannot find -lcompcalc

CMakefile.txt 是:

cmake_minimum_required(VERSION 2.8.9)
project(calculator)
set(CMAKE_BUILD_TYPE Release)

include_directories(../include)

file(GLOB SOURCES "*.c")

set ( PROJECT_LINK_LIBS libsimpcalc.a  libcompcalc.a)
link_directories({calculator_SOURCE_DIR}/../obj )

add_executable(calculator ${SOURCES})
target_link_libraries(calculator ${PROJECT_LINK_LIBS} )

不知道为什么在CMakeLists.txt 中寻找simpcalc 我特意说libsimpcalc.a

【问题讨论】:

  • 您知道库文件的完整路径,最好在target_link_libraries() 调用:set(PROJECT_LINK_LIBS ${calculator_SOURCE_DIR}/../obj/libsimpcalc.a ${calculator_SOURCE_DIR}/../obj/libcompcalc.a) 中使用它。顺便说一句,您在link_directories() 电话中忘记了$ 符号。 Stack Overflow 上格式化代码/消息的提示:选择代码/文本并使用 {} 按钮或 Ctrl+K
  • 缺少的“$”解决了这个问题!我一直在看那个并在网上搜索了2天!谢谢

标签: static cmake libs


【解决方案1】:

为什么要硬编码静态库依赖项?

假设你的依赖静态库构建如下:

add_library(simpcalc simpcalc.c)
target_include_directories(simpcalc PUBLIC ${CMAKE_CURRENT_LIST_DIR})

add_library(compcalc compcalc.c)
target_include_directories(compcalc PUBLIC ${CMAKE_CURRENT_LIST_DIR})

然后您可以按如下方式构建可执行文件:

add_executable(calculator calculator.c)
target_include_directories(calculator PRIVATE ${CMAKE_CURRENT_LIST_DIR})
target_link_libraries(calculator simpcalc compcalc)

这将确定您的库在哪里以及何时将它们重建给 CMake 的艰苦工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多