我有一个项目,其中包含非常模块化的组件(例如Dependency),
Project
-Dependency
--Include
--Src
--CMakeLists.txt
-Main
--main.cpp
--CMakeLists.txt
CMakeLists.txt
现在,我在主CMakeLists.txt中使用target_link_libraries()
和include_directories()
并带有明确的相对路径来使用它们。
我想将我的依赖项转换为独立的软件包/模块/组件/库/ 一些东西,以便删除显式路径。
我不想安装它们。它们将保留在构建树中。我想例如在不破坏任何内容的情况下移动整个Dependency文件夹,或将文件夹复制到另一个项目中并使其仅通过find_package()
调用即可工作。
-
我尝试过
target_include_directories(Dependency PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_link_libraries(Dependency PUBLIC *Sub-dependencies*)
和
export(TARGETS Dependency FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/DependencyConfig.cmake")
在Dependency CMakeLists.txt中,基于:
https://rix0r.nl/blog/2015/08/13/cmake-guide/& https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/
但是find_package()
仍然失败。
-
如何导出接口,以便CMake可以自动配置同一构建树中模块之间的依赖关系?
答案 0 :(得分:1)
如果您有target_include_directories
,则取决于PUBLIC / PRIVATE设置,该目标的从属目标也可以具有包含。
与target_link_directories
相同,它将库传播到相关目标。
您永远不需要库的路径,因为CMake 应该为您解决这个问题。如果没有,则可能是一个错误。