CMAKE: связать библиотеку из родительского каталога - PullRequest
0 голосов
/ 22 апреля 2020

Итак, вот мой древовидный каталог:

*common_folder
 \
  *main1_folder---CMakeLists.txt & file1.c & files2.c
  *
  *main2_folder
  *
  *common_librayX---file_libraryX.c (and header)
  *
  *common_libraryY--file_libraryY.c (and header)

Итак, я хочу смоделировать следующую строку: g cc -Wall -o MAIN file1. c file2. c file_libraryX . c file_libraryY. c

Итак, вот как я пытался с моим CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.0)
#Déclaration du projet
project(MAIN1 VERSION 1.0)

#Include headers
get_filename_component(PARENT_DIR ../ ABSOLUTE)
include_directories(${PARENT_DIR}/commonlibrayX)
include_directories(${PARENT_DIR}/commonlibraryY)

add_executable(
    MAIN1
    file1.c
    file2.c
    file_libraryX.c
    file_libraryY.c
)

install (TARGETS Project DESTINATION bin)

Конечно, я получаю ошибку, что он не может найти файлы file_libraryX. c и file_libraryy. c.

Я искал везде, и мне кажется, я совсем не понимаю, как вы включаете библиотеки (не заголовки) из разных каталогов, чем текущий где CMakeLists.txt. В моем случае родительский каталог.

Кроме того, причина того, почему у меня нет CMakeLists.txt на более высоком уровне в дереве каталога, заключается в том, что я хочу создавать разные двоичные файлы в каждой основной папке, не имея переписать CMakeLists.txt. Оказалось, они делятся общими библиотеками.

Может кто-нибудь помочь мне?

1 Ответ

2 голосов
/ 22 апреля 2020

Современный подход CMake:

common_folder/CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)
project(MAIN1 VERSION 1.0)
add_subdirectory(common_librayX)
add_subdirectory(common_librayY)
add_subdirectory(main1_folder)

common_folder/common_librayX/CMakeLists.txt

add_library(LIBX STATIC file_libraryX.c)
target_include_directories(LIBX PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

common_folder/common_librayY/CMakeLists.txt

add_library(LIBY STATIC file_libraryY.c)
target_include_directories(LIBY PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

common_folder/main1_folder/CMakeLists.txt

add_executable(MAIN1 file1.c file2.c)
target_link_libraries(MAIN1 PRIVATE LIBX LIBY)

Создание проекта:

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