我不是一个经验丰富的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)