我有几个项目,每个项目由一些库组成,每个库都在自己的子目录中,由顶级 CMakeLists.txt
文件连接在一起。我习惯于在每个 CMakeLists.txt
文件的顶部使用 project(<DIRNAME>)
,并尝试以这样的方式构建子项目,使它们可以从顶级项目分别编译。然而,虽然这对于独立的核心库可能有意义,但对于依赖于它们的库来说是行不通的,因为我需要做一些类似于以下的事情:
target_link_libraries(gui core)
如果我试图将 gui
编译为独立项目,core
将不会被定义。
在这种情况下使用 project()
是错误的吗?还是我漏掉了什么?
export
方案可能是最好的选择。 - Arek' Fuif(NOT TARGET ...)
只有在依赖目录在此目录之前被处理(例如,add_subdirectory(core)
必须在add_subdirectory(thisone)
之前)。在我的实现中,我检查依赖目录是否存在,而不是使用if(NOT TARGET...)
。 - cheshirekow