gpt4 book ai didi

c++ - 使用 CMake,为什么某些第三方库会自动让您查看其包含目录,而其他库则不会?

转载 作者:行者123 更新时间:2023-11-28 05:30:34 25 4
gpt4 key购买 nike

在 CMake 中,大多数第三方库根本不需要我指定它们的包含目录……它们似乎在幕后为我处理了这个问题。然而,一些第三方图书馆似乎把这项工作放在了我的盘子里。

我在第三方库中发现的差异是否表明我做错了什么?或者 CMake 只是一个结构化程度较低的环境,一些第三方库会比其他库更能捕获你的手?这里发生了什么?最佳做法?

我举几个例子。 OpenCV 让事情变得 super 简单,无需我提及它们的包含目录:

set(OpenCV_DIR ${THIRD_PARTY_DIR}/OpenCV)
find_package(OpenCV REQUIRED)
...
add_executable(${PROJECT_NAME} ${HEADER_FILES} ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

但是,Google 的 Protocol Buffer 要求我使用 include_directories 命令才能使用它们的头文件:

set(CMAKE_PREFIX_PATH ${THIRD_PARTY_PROTOBUF_DIR})
find_package(Protobuf ${THIRD_PARTY_DIR}/protobuf-2.6.1)
...
include_directories(${PROTOBUF_INCLUDE_DIRS})
add_library(${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} ${PROTOBUF_LIBRARIES})

最佳答案

target_include_directories() CMake version 2.8.11 引入了命令2013 年 5 月。这为库的开发人员提供了 self 传播包含路径的可能性。

但是将所有内容更改为 target_include_directories() 确实破坏了与以前版本的 CMake 的向后兼容性(参见 target_include_directories prior to 2.8.12?)。

所以这主要是一个遗留问题,我认为它会随着时间的推移而消失。

大多数情况下,您可以通过库根 CMakeLists.txt 顶部的 cmake_minimum_required() 行查看库正在使用什么。如果是,例如Protocol Buffers library ,他们确实更新了他们的 CMakeLists.txtcmake_minimum_required(VERSION 2.8.12) 并立即使用 target_include_directories()(参见 2015 年 7 月的 commit)。

关于c++ - 使用 CMake,为什么某些第三方库会自动让您查看其包含目录,而其他库则不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39649882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com