gpt4 book ai didi

cmake - 从 find-xxx.cmake 文件返回多个包含目录

转载 作者:行者123 更新时间:2023-12-02 20:47:25 25 4
gpt4 key购买 nike

我正在尝试将自定义 find-xxx.cmake 文件添加到我的 cmake 项目中,以便添加外部库。外部项目不仅对链接器有一些传递依赖,对预编译器也有一些传递依赖。 IE。我需要为 protobuf 和 occi 以及六个其他小型库提供 header ,以便包含外部项目的 header 。

find-extlib.cmake的相关部分:

function(MY_FIND_INCLUDE LIBNAME FILENAME SUFFIX)
find_path(${LIBNAME}_INCLUDE_DIR
NAMES ${FILENAME}
PATHS ${EXTLIB_POSSIBLE_DIRS}
PATH_SUFFIXES ${SUFFIX}
)

if (${LIBNAME}_INCLUDE_DIR)
MESSAGE_QUIETLY(EXTLIB_FIND_QUIETLY STATUS "Found ${${LIBNAME}_INCLUDE_DIR}")
elseif (EXTLIB_FIND_REQUIRED)
message(FATAL_ERROR "Could not find extlib.")
else ()
MESSAGE_QUIETLY(EXTLIB_FIND_QUIETLY WARNING "${LIBNAME} headers not found")
endif ()

mark_as_advanced(${LIBNAME}_INCLUDE_DIR)
endfunction ()

MY_FIND_INCLUDE(LIB1 header.h main/lib1)
if (LIB1_INCLUDE_DIR)
set(EXTLIB_INCLUDE_DIRS ${LIB1_INCLUDE_DIR})
endif ()
MY_FIND_INCLUDE(LIB2 lib2/lib2.h include)
if (LIB2_INCLUDE_DIR)
set(EXTLIB_INCLUDE_DIRS "${EXTLIB_INCLUDE_DIRS} ${LIB2_INCLUDE_DIR}")
endif ()
# etc, etc.

这会返回一个漂亮的列表,其中包含我需要添加的所有包含路径。它看起来就像我的库列表,我以非常相似的方式制作了它,并且似乎有效。

在我的 CMakeLists.txt 中,我添加:

target_include_directories(${PROJECT_NAME} PRIVATE ${EXTLIB_INCLUDE_DIRS})

构建失败,提示它无法在LIB1(或LIB2等)中找到 header 。我可以在我的 Linux 版本上的 MYLIB.dir/flags.make 中看到该列表没有被分解。标志应该位于:

-I path/to/lib1 -I path/to/lib2 ...

它列出了

-I "path/to/lib1 path/to/lib2 ..."

这真的是正确的行为吗?我不应该能够为单个项目提供多个包含目录吗?如果我必须单独找到所有这些库,那就太乏味了。它们每次都与此外部库具有相同的配置。总是很难判断 Kitware 实际上打算如何完成这些事情...我应该有不同的方式来编写我的 Find 模块吗?

最佳答案

分别引用每个包含目录。

而不是:设置(EXTLIB_INCLUDE_DIRS“${EXTLIB_INCLUDE_DIRS} ${LIB2_INCLUDE_DIR}”)

写:设置(EXTLIB_INCLUDE_DIRS“${EXTLIB_INCLUDE_DIRS}”“${LIB2_INCLUDE_DIR}”)

使用双引号,您可以在字符串中包含空格。

关于cmake - 从 find-xxx.cmake 文件返回多个包含目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43805466/

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