我有这个目录结构:
├──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
simpcalc
和compcalc
构建正常,运行“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
。
答案 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。