我正在从事的项目具有以下结构:
---Library1
------build
------include
------src
------CMakeLists.txt
---Library2
------build
------include
------src
------CMakeLists.txt
---Executable1
------build
------include
------src
------CMakeLists.txt
Library1
是我正在开发的库,需要与Library2
(第3方库)链接。构建Library1
时,我需要它来自动构建Library2
并与其链接。 Executable1
将需要构建并与Library1
链接。我不确定如何使用Cmake,我想知道是否有人可以指导我朝正确的方向发展。我想可能需要使用add_dependencies
命令或add_subdirectory
,但是我不确定如何使用它们并确保它们已链接到我的库。任何帮助,将不胜感激。 最佳答案
我认为这里最好的命令可能是 add_subdirectory
(您怀疑)和 target_link_libraries
。
我猜您的目录结构中,我希望在根目录中看到“顶级” CMakeLists.txt。在该CMake文件中,您将使用add_subdirectory
调用子目录的CMakeLists。
我想象Library1
和Library2
都是实际的CMake目标,通过add_library
包含在内,并且类似地,您也有add_executable(Executable1 ...)
。在这种情况下,可以将以下内容添加到Library1 / CMakeLists.txt:
target_link_libraries(Library1 Library2)
现在,只要将
Library2
指定为依赖项,CMake就会自动链接Library1
。如果对Library2
进行了修改,那么它将自动重建,然后再次链接到Library1
。同样,在Executable1 / CMakeLists.txt中,您可以执行以下操作:
target_link_libraries(Executable1 Library1)
也许唯一需要注意的是
add_subdirectory
命令的顺序必须是add_subdirectory(Library2)
add_subdirectory(Library1)
add_subdirectory(Executable1)
以便在
target_link_libraries
调用中引用之前定义依赖项。最后一点对我来说很奇怪,就是每个目标都有一个构建目录。通常,只需要一个构建目录(最好在源代码树之外)。