Могу ли я добавить библиотеку из папки выше? - PullRequest
0 голосов
/ 25 января 2019

Я не могу добавить свою статическую библиотеку в свой проект.

У меня есть следующая структура проекта:

+ root/
  + CmakeLists.txt // Include all projects
  + Base/
  | + foo.cpp
  | + CmakeLists.txt
  + App1/
  | + app1.cpp
  | + CmakeLists.txt // Requires Base lib
  + App2/
  | + app2.cpp
  | + CmakeLists.txt // Requires Base lib

Я пытаюсь сделать это следующим образом:

Base CmakeLists.txt:

cmake_minimum_required(VERSION 3.10.2)

add_library(Base STATIC foo.cpp)

App1 CmakeLists.txt:

cmake_minimum_required(VERSION 3.10.2)

project(App1)
add_executable(${CMAKE_PROJECT_NAME} app1.cpp)

include(../Base/CMakeLists.txt)

Но у меня есть следующая ошибка:

CMake Error at C:/DPA/Base/CMakeLists.txt:3 (add_library):
  Cannot find source file:

    foo.cpp

Как правильно настроить библиотеку для включения во все проекты?

1 Ответ

0 голосов
/ 25 января 2019

Это не то, как вы используете такую ​​структуру каталогов. Вместо этого в App1/CmakeLists.txt введите

add_executable(App1 app1.cpp)
target_link_libraries(App1 Base)

Это объявляет, что App1 зависит от Base и должно быть связано с этой библиотекой. «Связывание» означает не только передачу правильных аргументов вашему компоновщику, но также передает флаги включения и другие параметры компилятору при сборке App1 источников.

Если вы намереваетесь создавать только части вашего проекта, вы можете использовать дополнительный аргумент для add_executable, т.е.

add_executable(App1 EXCLUDE_FROM_ALL app1.cpp)

Таким образом, когда вы создаете цель по умолчанию, App1 не будет частью сборки. Вы все еще можете построить его вручную / по запросу, например, при работе с make-файлами

make App1

создаст исполняемый файл App1 и все, что для этого требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...