CMakeLists.txt 中的自己的图书馆设置

Eigen library setup in CMakeLists.txt

我有一个这样的项目文件结构:

.
├── CMakeLists.txt
├── deps
│   ├── cxxtest
│   └── eigen
├── main.cpp
└── tests
    ├── CMakeLists.txt
    └── hello_world.cpp

并且两个 CMakeLists.txt 文件和两个 .cpp 文件是

所以我的问题是为什么我必须如下将 Eigen 库设置放在 CMakeLists.txt 文件的顶层以使顶层 .cpp 文件工作,即找到 Eigen/Dense header,但是无论 CMakeLists.txt 文件的顶层和底层是否都具有以下设置,下层 .cpp 将始终有效?

find_package(Eigen3 3.3 REQUIRED NO_MODULE)
target_link_libraries(proj Eigen3::Eigen)

我猜您想在项目目录树中使用本地 Eigen 库,即 deps/eigen。最简单的方法是像往常一样添加 Eigen 子目录,使用 add_subdirectory。您可能还需要将目标库从 Eigen3::Eigen 更改为 eigen。主要 CMakeLists.txt 然后看起来像这样:

cmake_minimum_required(VERSION 3.14)
project(PROJECT)

add_subdirectory(deps/eigen)
add_subdirectory(tests)

set(SRC_LIST main.cpp)
add_executable(proj ${SRC_LIST})
target_link_libraries(proj eigen)

此外,为了使单元测试 hello_world.cpp 正常工作,您需要在 tests 目录的 CMakeLists.txt 中添加到 Eigen 库的链接,即:

target_link_libraries(hello_world eigen)