【发布时间】:2021-03-11 21:19:19
【问题描述】:
我的项目结构如下:
├── CMakeLists.txt
├── libA
│ ├── CMakeLists.txt
│ ├── include
│ │ └── libA
│ │ └── my_liba.h
│ ├── src
│ │ └── my_liba.cpp
│ └── test
├── libB
│ ├── CMakeLists.txt
│ ├── include
│ │ └── libB
│ │ └── my_libb.h
│ ├── src
│ │ └── my_libb.cpp
│ └── test
└── runner
├── CMakeLists.txt
└── src
└── main.cpp
我想实现以下目标:
- 能够分别构建
libA和libB和Runner - 能够一起构建。
对于依赖:libB 依赖于libA,而Runner 需要libB。
如何配置 libB 和 Runner?
这些是当前的CMakeLists.txt 文件:
libA/CMakeLists.txt:
cmake_minimum_required(VERSION 3.14)
project (MyLibA)
add_library(${PROJECT_NAME} src/my_liba.cpp)
add_library(Example::LibA ALIAS ${PROJECT_NAME})
target_include_directories( ${PROJECT_NAME}
PUBLIC ${PROJECT_SOURCE_DIR}/include
)
libB/CMakeLists.txt:
cmake_minimum_required(VERSION 3.14)
project (MyLibB)
add_library(${PROJECT_NAME} src/my_libb.cpp)
add_library(Example::LibB ALIAS ${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME} PRIVATE Example::LibA)
target_include_directories( ${PROJECT_NAME}
PUBLIC ${PROJECT_SOURCE_DIR}/include
)
Runner/CMakeLists.txt
project(runner)
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME}
Example::LibB
)
CMakeLists.txt:
cmake_minimum_required(VERSION 3.14)
project(Example)
add_subdirectory(libA)
add_subdirectory(libB)
add_subdirectory(runner)
使用当前配置,我可以在lib 目录之外构建所有内容。
我还可以从libA 目录中构建libA。但我无法从那里的文件夹中构建 libB 或 runner,这是意料之中的,因为他们不知道在哪里可以找到依赖项。
我必须如何更改我的CMakeFiles 才能使其正常工作?
【问题讨论】:
-
为什么要从子目录运行
make?只需从构建目录的根目录运行make <appropriate_target>。 -
我希望能够将
libA和libB也构建为独立库。 -
当您从其文件夹构建 libB 时,您希望它如何找到 libA? libA 是否已经安装在系统上,还是您希望 libB 也构建 libA?
-
@yemre 那就是我不知道什么是最好的解决方案,或者cmake是否有最佳实践