Я новичок в CMake и мне нужна помощь. Я пытаюсь разработать следующий cmaketutorial
проект:
.
├── CMakeLists.txt
├── lib
│ ├── CMakeLists.txt
│ ├── lib1
│ │ ├── CMakeLists.txt
│ │ └── lib1.h
│ └── lib2
│ ├── CMakeLists.txt
│ ├── lib2.c
│ └── lib2.h
└── cmaketutorial
├── CMakeLists.txt
└── cmaketutorial.c
lib1
: библиотека общего назначения. Он содержит только .h и его CMakeFiles.txt позволяет вам установить его в /usr/local/include
.
lib2
: универсальной библиотеке. Он содержит. c и .h, а его CMakeFiles.txt позволяет установить его в /usr/local/include
.
lib1 and lib2
: это две библиотеки, которые существуют сами по себе и взяты из соответствующих проектов. .
cmaketutorial
: это рассматриваемый проект, он содержит .c
, который включает lib1
и lib2
.
CMakeLists.txt (root)
cmake_minimum_required(VERSION 3.12)
project(
cmaketutorial
VERSION 0.0.1
LANGUAGES C
)
add_definitions(-D_GNU_SOURCE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -pedantic -Wno-unused-parameter")
add_subdirectory(lib)
add_subdirectory(cmaketutorial)
CMakeLists.txt
(root/lib
)
add_subdirectory(lib1)
add_subdirectory(lib2)
CMakeLists.txt
(root/lib/lib1
)
cmake_minimum_required(VERSION 3.12)
project(
lib1
VERSION 0.0.1
LANGUAGES C
)
add_library(${PROJECT_NAME} INTERFACE)
target_include_directories(
lib1
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
)
# install rules
install(FILES lib1.h DESTINATION include)
CMakeLists.txt
(root/lib/lib2
)
cmake_minimum_required(VERSION 3.12)
project(
lib2
VERSION 0.0.1
LANGUAGES C
)
if(CMAKE_CURRENT_BINARY_DIR)
set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR})
endif(CMAKE_CURRENT_BINARY_DIR)
add_library(
${PROJECT_NAME}
lib2.c
${CMAKE_CURRENT_BINARY_DIR}/lib2.h
)
target_include_directories(
${PROJECT_NAME}
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
)
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
install(FILES lib2.h DESTINATION include)
CMakeLists.txt
(root/cmaketutorial
)
# add the executable
add_executable(cmaketutorial cmaketutorial.c)
target_include_directories(
cmaketutorial PUBLIC
"${PROJECT_BINARY_DIR}"
)
С током CMakeFiles *
при компиляции cmaketutorial.c
он не может связать lib1
и lib2
. Как мне изменить общий CMakeFiles.txt
, чтобы все прошло как надо? Могу ли я использовать оригинальные CMakeFiles.txt
из lib1
и lib2
?
Кроме того, могу ли я настроить проект, для которого в cmaketutorial.c
включаются формы #include <lib/lib1.h>
и #include <lib/lib2.h>
?