CMake:无法链接到同一项目中的目标

问题描述 投票:0回答:1

我正在尝试将library2链接到library1,两者都位于同一源代码树中:

MyProject
├── CMakeLists.txt
├── Library1
│   └── CMakeLists.txt
│   └── include
│       └── foo.h
│       └── bar.h
│   └── src
│       └── foo.cpp
│       └── bar.cpp
├── Library2
│   └── CMakeLists.txt
│   └── include
│       └── baz.h
│   └── src
│       └── baz.cpp

CMakeLists.txt:

cmake_minimum_required (VERSION 3.17.0)
project(MyProject)

option(BUILD_SHARED_LIBS ON)

add_subdirectory(Library1)
add_subdirectory(Library2)

Library1/CMakeLists.txt:

project(Library1)

add_library(library1 
    src/foo.cpp 
    src/bar.cpp
)

target_include_directories(library1 PUBLIC
    ${CMAKE_SOURCE_DIR}/Library1/include
)

Library2/CMakeLists.txt:

project(Library2)

add_library(library2 
    src/baz.cpp
)

target_include_directories(library2 PUBLIC
    ${CMAKE_SOURCE_DIR}/Library1/include
    ${CMAKE_SOURCE_DIR}/Library2/include
)

target_link_libraries(library2 PUBLIC library1)

但是当library2到达它的链接阶段时,我收到这个错误:

usr/bin/ld: cannot find -llibrary1

链接器似乎没有在源代码树中查找

library1
。我尝试过直接通过
CMAKE_PREFIX_PATH
和通过
link_directories()
添加到目标的路径(也尝试过
target_link_directories()
)。我也无法使用
find_library()
,因为
library1
在通过运行
make
实际构建之前并不存在。

如何链接到将作为同一项目的一部分生成的目标?我觉得这应该可行。

c++ cmake linker-errors
1个回答
0
投票

我没有发现上面的 CMake 有什么特别错误的地方。我倾向于相信这可能是一个小错字,所以我已经重命名了库。

为了缩小问题范围,我删除了一些使当前问题变得混乱的 CMake 代码。

请尝试以下操作:

CMakeLists.txt

cmake_minimum_required(VERSION 3.17.0)
project(MY_PROJECT)

add_subdirectory(Library1)
add_subdirectory(Library2)

Library1/CMakeLists.txt

add_library(foobar STATIC)

target_sources(foobar
    src/foo.cpp 
    src/bar.cpp
)

target_include_directories(foobar PUBLIC
    include
)

Library2/CMakeLists.txt

add_library(baz STATIC)

target_sources(baz PRIVATE
    src/baz.cpp
)

target_include_directories(baz PUBLIC
    include
)

target_link_libraries(baz PRIVATE foobar)
© www.soinside.com 2019 - 2024. All rights reserved.