c++ - 如何在我的项目中的cmake中从同一个项目中获取多个库
问题描述
我有一个这样的项目:
main
|- CMakeLists.txt
|- src
|- api_1
| |- CMakeLists.txt (#1)
| |- api_1.h
| |- api_1.cpp
|
|- api_2
|- CMakeLists.txt (#2)
|- api_2.h
|- api_2.cpp
当我编译 probject 时,我想获得以下对象:
executable
libapi_1.so / libapi_1.a
libapi_2.so / libapi_2.a
该项目当前构建libapi_1.so
/ libapi_1.a
,但不构建其他两个。由于 probject 的复杂性和晦涩的命名,我无法理解在哪里/如何适当地修改主级别CMakeLists.txt
以获得附加.so / .a
文件。
有人可以向我提供有关需要什么的明确说明吗?
解决方案
您可以在 CMakeLists.txt 中设置 2 个(或更多)项目:
project(FullProject)
# config...
add_executable(exec1 ${sources_files}) # This line will create a new executable target
target_link_libraries(exec1 lib_you_need)
# config exec1...
# Now defines another target which is a library
add_library(lib1 ${sources_files}) # This line will create a new library target
target_include_directories(lib1 PRIVATE path_you_need)
当您构建时,您将有 2 个目标:exec1 和 lib1,您可以构建您想要使用的目标:
cmake --build . --target your_target # exec1 or lib1
或者
make your_target # exec1 or lib1
推荐阅读
- html - 如何有选择地居中文本?
- windows - 将 Docker Windows WSL Ubuntu 连接到 VMware Ubuntu
- laravel - 如何通过 laravel 上的 url 调用命令计划?
- python - some_dict.items() 是 Python 中的迭代器吗?
- redis - Redis 键空间通知 - 获取集合操作的值(小尺寸)
- redirect - 站点将您重定向太多次 - nginx (certbot) 站点可用文件
- android - 在某些片段中隐藏活动按钮并在某些片段中显示
- reactjs - 可以在不编写任何类的情况下使用 reactjs 吗?
- jira - JQL 在特定 sprint 范围之间记录所有 JIRA 问题
- wpf - WPF DataGridComboBoxColumn 绑定