【问题标题】:Binary directory of executables defined with CMake + Conan使用 CMake + Conan 定义的可执行文件的二进制目录
【发布时间】:2021-07-30 13:36:35
【问题描述】:

我正在使用 CMake,我已经定义了输出可执行文件的路径:

SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BINARY_DIR})
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BINARY_DIR})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BINARY_DIR})

BINARY_DIR 包含值:“/mnt/t/myapp/bin”。 问题出现在柯南 - 使用后可执行文件未复制到 ${BINARY_DIR} 目录:

INCLUDE(${BUILD_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)

有什么想法吗?我做错了什么?


#编辑

conanfile.txt:

[requires]
Poco/1.10.1@pocoproject/stable

[generators]
cmake

【问题讨论】:

  • 不清楚你是在消费一个包还是创建一个包。如果您的可执行文件不存在,则可能在打包时它不是副本。此外,如果您使用 TARGETS,则必须使用 CONAN_PKG::。您能否分享更多详细信息,例如您的配方、执行的命令、日志输出等...
  • 项目比较复杂,所以尝试创建一个极简的项目。这很奇怪,因为它在那里工作正常...... conanfile.txt 包括(主帖)。
  • Poco/1.10.1@pocoproject/stable 已弃用。使用来自 conancenter 的 poco/1.10.1@ 或 poco/1.11.0@

标签: cmake conan


【解决方案1】:

我找到了原因。

这个宏重新定义了 cmake 变量:

macro(conan_output_dirs_setup)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})

    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})

    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
endmacro()

解决这个问题:

conan_basic_setup(TARGETS NO_OUTPUT_DIRS)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2013-12-02
    • 2019-03-19
    相关资源
    最近更新 更多