Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake:避免多次添加库 我试图用CGub来建立一个C++项目。最后,至少会有两个大型库,我需要使用它们_C++_Cmake_Libraries - Fatal编程技术网

CMake:避免多次添加库 我试图用CGub来建立一个C++项目。最后,至少会有两个大型库,我需要使用它们

CMake:避免多次添加库 我试图用CGub来建立一个C++项目。最后,至少会有两个大型库,我需要使用它们,c++,cmake,libraries,C++,Cmake,Libraries,这些大型库本身,让我们称之为LIB1和LIB2,依赖于另一个库,称为LIB3。我还想直接使用LIB3 LIB1和LIB2使用Find.cmake文件自动包含LIB3 我的问题是:CMake是否注意到LIB1和LIB2包含同一个库?我甚至需要在主CMakeLists.txt中指定我也要使用LIB3作为我的主应用程序的直接依赖项吗 我如何保证,如果有多个版本的LIB3,那么所有其他lib都包含相同的文件?如果正确设置了目标依赖项,那么CMake将只使用所需的每个库中的一个。这并不重要,因为即使对于静

这些大型库本身,让我们称之为LIB1和LIB2,依赖于另一个库,称为LIB3。我还想直接使用LIB3

LIB1和LIB2使用Find.cmake文件自动包含LIB3

我的问题是:CMake是否注意到LIB1和LIB2包含同一个库?我甚至需要在主CMakeLists.txt中指定我也要使用LIB3作为我的主应用程序的直接依赖项吗


我如何保证,如果有多个版本的LIB3,那么所有其他lib都包含相同的文件?

如果正确设置了目标依赖项,那么CMake将只使用所需的每个库中的一个。这并不重要,因为即使对于静态库,它实际上也不应该包含两次库。一旦符号被解析并放入可执行文件中,链接器将不会在其他库中搜索该符号。@Someprogrammerdude是否意味着,将LIB3显式包含在根CMakeLists.txt中是一种好的方式,为了不让依赖项隐藏在另一个库后面?FindLib3.cmake脚本可能已经将
LIB3
设置为顶级导入库目标,这意味着您只需将其添加到
LIB1
LIB2
的依赖项列表中,然后cmake就会自动为您处理它。您可以使用命令执行此操作,例如
add_dependencies(LIB1 LIB3)
@Someprogrammerdude LIB1和LIB2不是我自己编写的库。更具体地说,我正在尝试设置PointCloudLibrary(PCL)。PCL有自己的配置,其中包括f.a.增压。在这种情况下,我首先可以找到Boost,但在那之后我需要找到PCL,而不是搜索Boost,而我无法避免(据我所知)。那我该怎么办?链接到PCL:如果您正确设置了目标依赖项,那么CMake将只使用所需的每个库中的一个。这并不重要,因为即使对于静态库,它实际上也不应该包含两次库。一旦符号被解析并放入可执行文件中,链接器将不会在其他库中搜索该符号。@Someprogrammerdude是否意味着,将LIB3显式包含在根CMakeLists.txt中是一种好的方式,为了不让依赖项隐藏在另一个库后面?FindLib3.cmake脚本可能已经将
LIB3
设置为顶级导入库目标,这意味着您只需将其添加到
LIB1
LIB2
的依赖项列表中,然后cmake就会自动为您处理它。您可以使用命令执行此操作,例如
add_dependencies(LIB1 LIB3)
@Someprogrammerdude LIB1和LIB2不是我自己编写的库。更具体地说,我正在尝试设置PointCloudLibrary(PCL)。PCL有自己的配置,其中包括f.a.增压。在这种情况下,我首先可以找到Boost,但在那之后我需要找到PCL,而不是搜索Boost,而我无法避免(据我所知)。那我该怎么办?链接到PCL: