Настройка собственной библиотеки в CMakeLists.txt - PullRequest
0 голосов
/ 06 января 2020

У меня есть структура файла проекта, подобная этой:

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

и два файла CMakeLists.txt и два. cpp файла

enter image description here

Поэтому мой вопрос заключается в том, почему я должен поместить настройку библиотеки Eigen в верхний уровень файла CMakeLists.txt следующим образом, чтобы обеспечить работу верхнего уровня. cpp файл, т. Е. Поиск заголовка Eigen / Dense, но более низкого уровня из. cpp всегда будет работать независимо от того, имеют ли следующие настройки верхний и нижний уровни файлов CMakeLists.txt или нет?

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

1 Ответ

0 голосов
/ 07 января 2020

Полагаю, вы хотите использовать локальную библиотеку 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, необходимо добавить ссылку на библиотеку Eigen в CMakeLists.txt в tests каталог, то есть:

target_link_libraries(hello_world eigen)
...