【问题标题】:Error “No rule to make target …”错误“没有制定目标的规则……”
【发布时间】:2016-12-17 15:30:32
【问题描述】:

我正在尝试运行 travis 测试,但出现以下错误。

我检查了我的文件和目录,所有文件都存在。

我认为我在 cmake 文件中的错误,但我找不到它。 也许有人可以帮助我?

make[1]: *** 没有规则来制作目标 CMakeFiles/test.dir/all', needed byCMakeFiles/Examples.dir/all'。停下来。

cmake_minimum_required(VERSION 2.8.7)

project(test)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)

option(BUILD_SHARED_LIBS "Build shared instead of static library" OFF)
option(BUILD_TESTS "Build tests for webdavclient" ON)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/tests/ /sources)
add_library(test STATIC ${CMAKE_CURRENT_SOURCE_DIR}/sources/client.cpp tests/main.cpp)

find_package(OpenSSL REQUIRED)
find_package(Boost REQUIRED)
find_package(CURL REQUIRED)
include_directories(${CURL_INCLUDE_DIR})

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    target_link_libraries(test ${Boost_LIBRARIES})
endif()

if(UNIX)
    set(DEPENDS_LIBRARIES ${OPENSSL_LIBRARIES} ${CURL_LIBRARY} ${Boost_LIBRARIES})
elseif(MSVC)
    set(DEPENDS_LIBRARIES ${OPENSSL_LIBRARIES} ${CURL_LIBRARY} ${Boost_LIBRARIES} ws2_32)
endif()

add_executable(Examples ${CMAKE_CURRENT_SOURCE_DIR}/examples/main.cpp)
target_link_libraries(Examples ${PROJECT_NAME} ${DEPENDS_LIBRARIES})

if(BUILD_TESTS)
    enable_testing()
    file(GLOB ${PROJECT_NAME}_TEST_SOURCES tests/*.cpp)
    add_executable(init ${${PROJECT_NAME}_TEST_SOURCES})
    target_link_libraries(init ${PROJECT_NAME} ${DEPENDS_LIBRARIES})
    add_test(NAME init COMMAND init "-s" "-r" "compact" "--use-colour" "yes")
endif()

【问题讨论】:

  • 你运行过 CMake 吗?你在构建目录中调用你的 Makefile 吗?你的生成器真的是用于 Makefile 的吗? Makefile 是否退出? “以下错误”在哪里?
  • 这是travis-ci.org的github项目
  • 这是 travis 日志中的错误

标签: c++ cmake


【解决方案1】:

命令enable_testing() 除其他外创建目标test。但是您已经有了同名的库目标。这让 CMake 感到困惑。为了避免这种情况,重命名库目标

另外,不建议目标名称与项目名称相同。所以,也重命名项目

【讨论】:

  • 谢谢,还有一个问题,我在 github 项目“tests”中有目录,其中包含“init.cpp”文件,其中包括文件“include/client.hpp”。文件“client.hpp”使用 boost 库,您可以在我的代码中看到我正在尝试使用文件“init.cpp”开始测试,但不幸的是我在 travis 日志 init.cpp:(.text+0x8d4) 中有错误: 对`boost::filesystem::path::extension() const'的未定义引用
  • find_package(Boost)仅与 Boost 的核心部分组织交互。如需使用 filesystem 组件,您需要告知find_package()find_package(Boost COMPONENTS filesystem)
  • 不建议目标名称与项目名称相同。 为什么?
  • @PengheGeng:我读到了一些 CMake 生成器在项目和目标名称相同的情况下可能表现不正确的情况。但是,我无法提供此类讨论的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多