gpt4 book ai didi

build - 使用 CMake 安装 ExternalProject

转载 作者:行者123 更新时间:2023-12-03 09:32:09 24 4
gpt4 key购买 nike

我的 CMakeLists.txt 之一中有以下代码:

FIND_PACKAGE(sphinxbase)
if (${SPHINXBASE_FOUND})
INCLUDE_DIRECTORIES(${SPHINXBASE_INCLUDE_DIR}/sphinxbase/)
else ()
ExternalProject_Add(
sphinxbase
GIT_REPOSITORY "https://github.com/cmusphinx/sphinxbase.git"
GIT_TAG "e34b1c632392276101ed16e8a05862e43f038a7c"
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/sphinxbase
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/sphinxbase/autogen.sh
BUILD_COMMAND ${MAKE}
UPDATE_COMMAND ""
INSTALL_COMMAND ""
BUILD_IN_SOURCE ON
LOG_DOWNLOAD ON
LOG_UPDATE ON
LOG_CONFIGURE ON
LOG_BUILD ON
LOG_TEST ON
LOG_INSTALL ON
)
ExternalProject_Get_Property(sphinxbase SOURCE_DIR)
ExternalProject_Get_Property(sphinxbase BINARY_DIR)
SET(SPHINXBASE_SOURCE_DIR ${SOURCE_DIR})
SET(SPHINXBASE_BINARY_DIR ${BINARY_DIR})
SET(SPHINXBASE_LIBRARIES ${SPHINXBASE_BINARY_DIR}/src/libsphinxbase/.libs/libsphinxbase.a)
INCLUDE_DIRECTORIES(${SPHINXBASE_SOURCE_DIR}/include)
endif ()
SET(DEPENDENCIES ${DEPENDENCIES} sphinxbase)
SET(LIBS ${LIBS} ${SPHINXBASE_LIBRARIES})

除了我要安装的 TARGET 之外,我将如何安装这个 ExternalProject?现在我正在尝试这样做:
install(TARGETS ${LIBS}
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
OPTIONAL
)

install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
)

但是我收到了以下错误:

CMake Error at CMakeLists.txt:197 (install):
install TARGETS given target
"/Users/syb0rg/Dropbox/Development/Khronos/Khronos/lib/sphinxbase/src/libsphinxbase/.libs/libsphinxbase.a"
which does not exist in this directory.


有什么建议?

最佳答案

命令流 install(TARGETS)安装使用 add_executable 创建的目标或 add_library命令。对于安装具体文件,您需要使用命令流 install(FILES) .

您可以按原样安装子项目,而不是从子项目的构建目录中安装选定的文件。为此,您可以使用

make DESTDIR=<...> install

命令为 INSTALL ExeternalProject_Add 的选项.此命令将安装 整个子项目进入以 DESTDIR 给出的目录make 的参数(有关此参数的更多信息可以在 here 中找到)。

那么你可以使用 install(DIRECTORY)一次安装所有子项目文件的命令:
# It is better to use binary directory for download or build 3d-party project 
set(sphinxbase_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/lib/sphinxbase)
# This will be used as DESTDIR on subproject's `make install`.
set(sphinxbase_DESTDIR ${CMAKE_CURRENT_BINARY_DIR}/lib/sphinxbase_install)

ExternalProject_Add(
sphinxbase
GIT_REPOSITORY "https://github.com/cmusphinx/sphinxbase.git"
GIT_TAG "e34b1c632392276101ed16e8a05862e43f038a7c"
SOURCE_DIR ${sphinxbase_SOURCE_DIR}
# Specify installation prefix for configure.sh (autogen.sh).
CONFIGURE_COMMAND ./autogen.sh --prefix=${CMAKE_INSTALL_PREFIX}
BUILD_COMMAND ${MAKE}
UPDATE_COMMAND ""
# Fake installation: copy installed files into DESTDIR.
INSTALL_COMMAND make DESTDIR=${sphinxbase_DESTDIR} install
...
)
# Actually install subproject.
install(DIRECTORY ${sphinxbase_DESTDIR}/ DESTINATION "/")

请注意, 根目录用作 DESTINATION .这是因为 sphinxbase_DESTDIR 下的文件目录已根据 CMAKE_INSTALL_PREFIX 定位, 传递为 --prefix选项 configure.sh (在给定的情况下 autogen.sh)。

如果您知道,该子项目仅在安装前缀下安装其文件(由 --prefix 给出),您可以使主项目安装更易于打包:
install(DIRECTORY ${sphinxbase_DESTDIR}/${CMAKE_INSTALL_PREFIX}/ DESTINATION ".")

因为现在 相对路径 用于 DESTINATION选项,项目将正确支持打包。例如, make DESTDIR=<...> install也适用于主要项目。

请注意,即使 ExternalProject_Add用于构建 CMake 子项目,在该子项目中创建的目标不会被主项目看到。

关于build - 使用 CMake 安装 ExternalProject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35934112/

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