build - CMake 依赖目标不存在

标签 build configuration compiler-errors cmake dependencies

我有以下脚本来构建我的项目之一

CMAKE_MINIMUM_REQUIRED(VERSION 3.0.2)
INCLUDE(ExternalProject)
SET(PROJECT_NAME Khronos)
PROJECT(${PROJECT_NAME})
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
SET_DIRECTORY_PROPERTIES(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/library-build)

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     make install
        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})

FIND_PACKAGE(pocketsphinx)
if (${POCKETSPHINX_FOUND})
    INCLUDE_DIRECTORIES(${POCKETSPHINX_INCLUDE_DIR}/pocketsphinx/)
    add_definitions( -DMODELDIR="/usr/local/share/pocketsphinx/model")  # TODO: more portable
    SET(DEPENDENCIES ${DEPENDENCIES} pocketsphinx)
else ()
    ExternalProject_Add(
        pocketsphinx
        DEPENDS             sphinxbase
        GIT_REPOSITORY      "https://github.com/cmusphinx/pocketsphinx.git"
        GIT_TAG             "0d41af2efe3f77a3e7f22a54e42684bb1562876d"
        SOURCE_DIR          ${CMAKE_CURRENT_SOURCE_DIR}/lib/pocketsphinx
        CONFIGURE_COMMAND   ${CMAKE_CURRENT_SOURCE_DIR}/lib/pocketsphinx/autogen.sh --prefix=<INSTALL_DIR> --with-sphinxbase=${SPHINXBASE_BINARY_DIR}
        BUILD_COMMAND       make
        UPDATE_COMMAND      ""
        INSTALL_COMMAND     make install
        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(pocketsphinx SOURCE_DIR)
    ExternalProject_Get_Property(pocketsphinx BINARY_DIR)
    SET(POCKETSPHINX_SOURCE_DIR ${SOURCE_DIR})
    SET(POCKETSPHINX_BINARY_DIR ${BINARY_DIR})
    SET(POCKETSPHINX_LIBRARIES ${POCKETSPHINX_BINARY_DIR}/src/libpocketsphinx/.libs/libpocketsphinx.a)
    INCLUDE_DIRECTORIES(${POCKETSPHINX_SOURCE_DIR}/include/)
    add_definitions( -DMODELDIR="${POCKETSPHINX_BINARY_DIR}/model")
    SET(DEPENDENCIES ${DEPENDENCIES} pocketsphinx)
endif ()
SET(LIBS ${LIBS} ${POCKETSPHINX_LIBRARIES})

FIND_PACKAGE(PortAudio)
if (${PORTAUDIO_FOUND})
    INCLUDE_DIRECTORIES(${PORTAUDIO_INCLUDE_DIRS})
    SET(DEPENDENCIES ${DEPENDENCIES} PortAudio)
else ()
    ExternalProject_Add(
        PortAudio
        SVN_REPOSITORY      "https://subversion.assembla.com/svn/portaudio/portaudio/trunk/"
        SVN_TRUST_CERT      1
        SOURCE_DIR          ${CMAKE_CURRENT_SOURCE_DIR}/lib/PortAudio
        CONFIGURE_COMMAND   ${CMAKE_CURRENT_SOURCE_DIR}/lib/PortAudio/configure --prefix=<INSTALL_DIR>
        BUILD_COMMAND       make
        UPDATE_COMMAND      ""
        INSTALL_COMMAND     make install
        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(PortAudio SOURCE_DIR)
    ExternalProject_Get_Property(PortAudio BINARY_DIR)
    SET(PORTAUDIO_SOURCE_DIR ${SOURCE_DIR})
    SET(PORTAUDIO_BINARY_DIR ${BINARY_DIR})
    SET(PORTAUDIO_LIBRARIES ${PORTAUDIO_BINARY_DIR}/lib/.libs/libportaudio.dylib)
    INCLUDE_DIRECTORIES(${PORTAUDIO_SOURCE_DIR})
    SET(DEPENDENCIES ${DEPENDENCIES} PortAudio)
endif ()
SET(LIBS ${LIBS} ${PORTAUDIO_LIBRARIES})

FIND_PACKAGE(LibSndFile)
if(${LIBSNDFILE_FOUND})
    INCLUDE_DIRECTORIES(${LIBSNDFILE_INCLUDE_DIRS})
    SET(DEPENDENCIES ${DEPENDENCIES} LibSndFile)
else ()
    ExternalProject_Add(
        LibSndFile
        URL                 "http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.26.tar.gz"
        CONFIGURE_COMMAND   ${CMAKE_CURRENT_SOURCE_DIR}/lib/LibSndFile/configure --prefix=<INSTALL_DIR> --disable-external-libs
        BUILD_COMMAND       ${MAKE}
        SOURCE_DIR          ${CMAKE_CURRENT_SOURCE_DIR}/lib/LibSndFile
        UPDATE_COMMAND      ""
        INSTALL_COMMAND     make install
        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(LibSndFile SOURCE_DIR)
    ExternalProject_Get_Property(LibSndFile BINARY_DIR)
    SET(LIBSNDFILE_SOURCE_DIR ${SOURCE_DIR}/src)
    SET(LIBSNDFILE_BINARY_DIR ${BINARY_DIR})
    SET(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_BINARY_DIR}/src/.libs/libsndfile.a)
    INCLUDE_DIRECTORIES(${LIBSNDFILE_SOURCE_DIR})
    SET(DEPENDENCIES ${DEPENDENCIES} LibSndFile)
endif ()
SET(LIBS ${LIBS} ${LIBSNDFILE_LIBRARIES})

# TODO: create FindTritium.cmake
ExternalProject_Add(
    tritium
    GIT_REPOSITORY  "https://github.com/syb0rg/tritium.git"
    GIT_TAG         "f6cd6a750945373b48c05c0f2d682e478e6a719d"
    SOURCE_DIR      ${CMAKE_CURRENT_SOURCE_DIR}/lib/tritium
    UPDATE_COMMAND  ""
    INSTALL_COMMAND make install
    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(tritium SOURCE_DIR)
ExternalProject_Get_Property(tritium BINARY_DIR)
SET(TRITIUM_SOURCE_DIR ${SOURCE_DIR})
SET(TRITIUM_BINARY_DIR ${BINARY_DIR})
INCLUDE_DIRECTORIES(${TRITIUM_SOURCE_DIR}/include)
SET(TRITIUM_LIBRARIES ${TRITIUM_BINARY_DIR}/libtritium.a)
SET(LIBS ${LIBS} ${TRITIUM_LIBRARIES})
SET(DEPENDENCIES ${DEPENDENCIES} tritium)

INCLUDE_DIRECTORIES(include)
ADD_SUBDIRECTORY(src)

ADD_EXECUTABLE(${PROJECT_NAME}
        $<TARGET_OBJECTS:audio>
        $<TARGET_OBJECTS:util>
        $<TARGET_OBJECTS:main>
        )
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${LIBS})
ADD_DEPENDENCIES(${PROJECT_NAME} ${DEPENDENCIES})

运行时,它会给我以下输出:

$ cmake ..
-- The C compiler identification is AppleClang 7.3.0.7030029
-- The CXX compiler identification is AppleClang 7.3.0.7030029
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Doxygen: /usr/local/bin/doxygen (found version "1.8.11") 
-- Found sphinxbase: /usr/local/lib/libsphinxbase.dylib  
-- Found pocketsphinx: /usr/local/lib/libpocketsphinx.dylib  
-- Found Portaudio: /usr/local/lib/libportaudio.dylib
-- Found LibSndFile: /usr/local/lib/libsndfile.dylib  
-- Configuring done
CMake Error at CMakeLists.txt:189 (ADD_DEPENDENCIES):
  The dependency target "LibSndFile" of target "Khronos" does not exist.


CMake Error at CMakeLists.txt:189 (ADD_DEPENDENCIES):
  The dependency target "PortAudio" of target "Khronos" does not exist.


CMake Error at CMakeLists.txt:189 (ADD_DEPENDENCIES):
  The dependency target "pocketsphinx" of target "Khronos" does not exist.


CMake Error at CMakeLists.txt:189 (ADD_DEPENDENCIES):
  The dependency target "sphinxbase" of target "Khronos" does not exist.


-- Generating done
-- Build files have been written to: /Users/syb0rg/Dropbox/Development/Khronos/Khronos/build

对这些错误进行研究没有发现任何结果。是什么导致我的脚本中出现这些错误?我应该更改什么来修复它们?

最佳答案

命令

find_package(<libname>)

没有定义 CMake 目标 <libname> .

你需要移动附件

SET(DEPENDENCIES ${DEPENDENCIES} ...)

对应else子句,用 ExternalProject_Add 定义适当的目标.

关于build - CMake 依赖目标不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37120579/

相关文章:

Java 配置构建路径或 WEB-INF/lib 文件夹

javascript - 如何使用 Html5 模板忽略某些 javascript 库?

configuration - 如何找到CouchDB的local.ini文件,以便自定义其设置?

c++ - 错误 C228 : left of "must have class/struct/union several times

javascript混淆作为构建过程的一部分

python - Pyinstaller 创建 Linux 二进制文件时出现以 '\xe8' 开头的非 UTF-8 代码错误

build - 在 CMake 中处理自定义文件类型依赖项的理想方法是什么?

c# - 从通过单元测试项目调用的类库访问 App.Config 设置

C 编译器错误 : unknown type name '__evenaccess'

c - 为什么这不是重复符号错误?