我们有一个项目P(Linux上的C/C++ ),包含库lib1lib2lib3

  • lib1独立链接到另一个系统范围的库
  • lib2链接到lib1
  • lib3链接到lib1lib2

我们有一个目录P和每个libs的额外目录(所以, P/lib1/P/lib2/ ...)。 每个图书馆都有自己的测试。

问题:

  • 请问如何为此场景组织CMakeLists.txt
  • 我们应该只创建一个主build目录还是每个lib一个目录?
  • 我们可以在CMakeLists.txt选择STATIC vs. SHARED链接吗?

===============>>#1 票数:27 已采纳

在这种情况下,我建议使用单个build /目录。 CMake可能会在那里生成单独的lib1,lib2和lib3目录。

使用BUILD_SHARED_LIBS标志可以在STATIC与SHARED之间切换(查看add_library文档)

关于CMakeLists.txt组织,您可以选择:

  1. 您可以构建一个具有多个add_library条目的CMakeLists.txt。 这样做的好处是,您将获得一个CMakeLists.txt,当项目很简单时,有些人可能会喜欢。

  2. 您可以将项目拆分为多个分布在lib1,lib2和lib3目录上的CMakeLists.txt,并使用带有add_subdirectory的root cmakelists.txt。 这个设置的好处是,通过一次调用(在你的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 )

  ask by Cartesius00 translate from so

未解决问题?本站智能推荐:

7回复

如何生成CMakeLists.txt?

我需要一些关于如何为CMake自动生成CMakeLists.txt文件的指针/建议。 有谁知道任何现有的发电机? 我检查了CMake Wiki中列出的那些,但不幸的是它们不适合我。 我已经有了一个基本的Python脚本,它遍历我项目的目录结构并生成所需的文件,但它现在真的很“哑”。
2回复

“ CMakeLists.txt”似乎丢失了

我试图构建SFML,以便开始使用c ++开发2D游戏。 我将源代码目录放在C:中(目录本身称为'SFML')。 尝试使用CMake生成.cbp文件时,我遇到了一个错误: “源目录“ C:/ SFML”似乎不包含CMakeLists.txt” 似乎有一个缺少的文件,CMake没有创
2回复

如何从CMakeLists.txt生成cscope.files

我正在使用CMake构建代码。 CMakeLists.txt包含所有.C或.CPP文件以及所有包含目录的列表。 如何实现CMakeLists.txt,以便可以使用make选项为我生成cscope.files,其中包含所有.C和.CPP(或.CXX)文件以及包含目录中所有.h文件的列表在里
1回复

在Clion中更改默认的cmakelists.txt

如果我想例如添加额外的标志,或更改为C编译器。 可能吗? 提前致谢
1回复

直接传递编译选项(绕过CMakeLists.txt)

给定代码 要切换HERE THERE的行为,我需要在我'的CMakeLists.txt以下 那我可以 cmake -DMY_DEFINE=1到HERE cmake -DMY_DEFINE=0到THERE 这似乎有点多余...是否可以删除我的CMakeLists.
1回复

CMAKE错误工程文件无效; 不包含cmakelists.txt

我正在尝试在64位Windows计算机上从以下网站编译代码。 https://dms.sztaki.hu/en/project/gaussian-mixture-modeling-gmm-es-fisher-vector-toolkit 我收到以下错误: 1)错误配置..项
1回复

CMake:如何在CMakeLists.txt中构建多个库?

使用LLVM,我尝试在一个项目中创建多个模块: 如果我仅指定一个add_library() ,则此方法很好,但是使用其中两个会使第二个库失败: 我想知道如何在项目中构建多个库? 如果我使用自己的CMakeLists.txt在一个全新的文件夹中构建第二个库,则一切正常。
1回复

在cmake中,cmake文件夹和CMakeLists.txt可以放在其他文件夹中吗?

在cmake中,cmake文件夹和CMakeLists.txt可以放在其他文件夹中吗?\\ 通常,cmake文件夹和CmakeLists.txt位于同一源根目录中。 但是,要重新将cmake文件夹用于其他项目,是否可以将cmake文件夹放到其他地方? 这是一个很好的方法吗?
1回复

CMakeLists.txt用于C ++项目中的第三方C文件

我的C ++项目doggo有一个doggo/external/目录用于第三方代码。 目前它包含gtest和CMakeLists.txt: 我的顶级doggo / CMakeLists.txt包含add_subdirectory(external)用于查找和构建第三方库。 一切都像魅力
1回复

CMakeLists.txt访问GSL库C

尝试将GSL(Ubuntu 18.04)与CMake一起使用。 根据他们的INSTALL文件安装它: “ sudo sh配置&& sudo make && sudo make安装” 我的文件夹结构: GSL头文件位于/gsl-2.5/