CMake中仅调用target_link_libraries是否无需somelib_INCLUDE_DIRS?
关于CMake中find_package后无需手动添加INCLUDE_DIRS的问题
你的这个经验是完全正确的,核心原因并不是target_link_libraries内部调用了target_include_directories,而是现代CMake的find_package返回的库变量(如somelib_LIBRARIES)大多是「导入目标(Imported Targets)」,这类目标本身已经封装了所有依赖信息——包括头文件路径、编译选项、甚至依赖的其他库。
具体来说:
- 当你用
target_link_libraries链接这些导入目标时,CMake会自动将目标附带的头文件路径传递给你的可执行/库目标,无需手动调用target_include_directories添加somelib_INCLUDE_DIRS。 - 比如常见的OpenCV、Boost等库,它们的CMake配置都会生成导入目标,你链接后头文件会自动被包含。
- 当然也存在例外:部分老旧第三方库的
find_package配置可能只返回原始的路径列表(而非导入目标),这种情况下你确实需要手动添加somelib_INCLUDE_DIRS。但这种情况在现代CMake生态里已经越来越少见。
内容的提问来源于stack exchange,提问作者Felix F Xu
相关产品推荐
相关产品推荐

