cmake找不到我的静态库

时间:2017-03-15 16:23:37

标签: static cmake libs

我有这个目录结构:
├──bin
├──建筑
├──计算器
│├──建造
│├──计算器。
│└──CMakeLists.txt
├──CMakeLists.txt
├──compcalc
│├──建造
│├──CMakeLists.txt
│├──compcalc.c
│└──compcalc.h
├──包括
│└──computer.h
├──obj
│├──libcompcalc.a
│└──libsimpcalc.a
├──simpcalc
│├──建造
│├──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} )

simpcalc我明确指出CMakeLists.txt时,不确定为什么要查找libsimpcalc.a

1 个答案:

答案 0 :(得分:0)

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

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

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。