Cmake:在子目录中定义的目标没有链接.我得到了未定义的引用



我不是一个经验丰富的CMake用户,我目前正在尝试将现有项目包含到顶级项目中,而顶级项目的CMakelists.txt非常简单:

cmake_minimum_required(VERSION 2.8)
project(A)
add_subdirectory(B)

作为在这一点上逐渐测试的一个主题,我想看看项目B中定义的目标是否正在构建。因此,从项目a的构建目录运行make all可以正确构建,但一些并非全部目标的目标无法从项目a构建目录构建,在那里我得到了"未定义引用"的链接错误,而同一目标可以从项目B的构建目录成功构建。有人能解释一下可能是什么问题吗?

添加子目录只会导致cmake处理该子目录中的CMakeLists.txt文件,它不会对正在构建的目标施加任何依赖。

将这个过程视为从您添加的所有CMakeLists文件中构建一个大型规则集(对于它要转换到的任何构建系统(可能会有所帮助。

但是,这只会在生成的规则集中放置所有单个CMakeLists目标的规则,这样您就可以按名称构建这些目标。如果您选择在A中构建一个未声明依赖于B的目标(即使它可能实际上取决于它(,则不会使用B

要做到这一点,您必须设置链接器依赖项,比如(当然,这取决于名称和B生成的内容(:

cmake_minimum_required(VERSION 2.8)
project(A)
add_subdirectory(B)
target_link_libraries(A B)

最新更新