Multiple library CMakeLists.txt
Multiple library CMakeLists.txt
我们有一个项目P(在Linux上C/C++
(,由库lib1
、lib2
、lib3
组成。
-
lib1
是独立链接到另一个系统范围的库 -
lib2
指向lib1
的链接 -
lib3
链接到lib1
和lib2
我们有一个目录 P 和每个库的额外目录(所以,P/lib1/
, P/lib2/
...每个库都有自己的测试。
问题:
- 请问,如何为这种情况组织
CMakeLists.txt
? - 我们应该只创建一个主
build
目录还是为每个库创建一个? - 我们可以在
CMakeLists.txt
中选择STATIC vs. SHARED
链接吗?
在这种情况下,我建议使用单个build/目录。CMake 可能会在其中生成单独的 lib1、lib2 和 lib3 目录。
可以使用BUILD_SHARED_LIBS 标志在静态与共享之间切换(查看add_library文档(
关于CMakeLists.txt组织,选择权在您手中:
您可以构建单个 CMakeLists.txt其中包含多个add_library条目。这样做的好处是您将获得一个CMakeLists.txt,当项目简单时,有些人可能更喜欢它。
您可以将项目拆分为多个 CMakeList.txt分布在 lib1、lib2 和 lib3 目录中,并使用根 cmakelists.txt并add_subdirectory。这种设置的好处是,通过一次调用(在您的 build/目录中(生成构建文件会更容易,但您可以轻松地进入例如 lib3/并在那里调用 make/msbuild。CMake 将确保正确构建依赖项
示例 1:
project( P )
# Setup lib1
set ( LIB1_SOURCES ... ) # Fill in your set of source-files here...
add_library( lib1 ${LIB1_SOURCES} )
# Do similar for lib2 and lib3
target_link_libraries( lib2 lib1 ) # Indicate that lib1 is needed for lib2
target_link_libraries( lib3 lib1 lib2 ) # Indicate that lib2 and lib1 are needed for lib3
示例 2:
project( P )
add_subdirectory( lib1 )
add_subdirectory( lib2 )
add_subdirectory( lib3 )
在每个子目录中,您都可以编写CMakeLists.txt例如,在lib3的情况下:
project( lib3 )
set( LIB3_SOURCES ... ) # Setup the list of sources here.
add_library( lib3 ${LIB3_SOURCES} )
# You can refer to other libraries which should be available from the root cmakelists.
target_link_libraries( lib3 lib1 lib2 )
相关文章:
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- CMakeLists.txt中的命名空间表示法
- 将生成文件转换为 CMakeLists.txt等效项
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- 直接传递编译选项(绕过 CMakeLists.txt)
- 如何在 CMakeLists.txt Qt Creator 中包含头文件?
- 了解编写 CMakeLists.txt
- 如何制作 cmakelists.txt编译使用在其他地方声明和实现的函数和类的 CPP
- 将目录添加到没有 CMakeLists.txt 的 CMake 项目
- 如何在 CMakeLists.txt for Visual Studio 2019 中启用 clang-tidy?
- CMakeLists.txt structure
- 在CMakeLists中包含目录的更好方法.txt
- CMakeLists.txt:(add_executable):没有给目标提供来源:教程
- 如何将opencv包添加到CMakelists.txt
- 如何在不更改CMakeLists.txt的情况下(可能通过CLI)将CFLAGS和CXXFLAGS传递给cmake
- 如何在CMakeLists.txt中正确设置CMake标志
- 如何为 UnitTest++ 项目编写 CMakeLists.txt 文件
- 设置诊断:插入符号来自 CMakeLists.txt
- cmake find_package CMakeLists.txt 子文件夹中的相对路径
- 在cmakelists.txt中链接GSL