【问题标题】:Cmake - I have to run cmake --build . twice for a binary to be buildCmake - 我必须运行 cmake --build 。构建二进制文件两次
【发布时间】:2021-09-24 13:33:27
【问题描述】:

我对柯南和 Cmake 有意见:

使用柯南,我正在下载我的库,我想用 Cmake 编译,这是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)
project(BABEL)

set(CMAKE_CXX_STANDARD 20)

set(PROJECT_NAME BABEL)

set(SOURCES qt/main.cpp)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
include(${CMAKE_BINARY_DIR}/conan_paths.cmake)

conan_basic_setup(KEEP_RPATHS)

if (APPLE)
    set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
endif (APPLE)

file(WRITE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf [Paths]\nPrefix=${CONAN_QT_ROOT})

add_executable(${PROJECT_NAME} ${SOURCES})

find_package(portaudio REQUIRED)
find_package(opus REQUIRED)
find_package(Qt5 COMPONENTS Widgets Network Core Gui REQUIRED)

target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
target_link_libraries(${PROJECT_NAME} opus)

if (WIN32)
    target_link_libraries(${PROJECT_NAME} portaudio_x64)
else()
    target_link_libraries(${PROJECT_NAME} portaudio)
endif()

如果我写这个命令:

mkdir build && cd build && conan install .. && cmake .. -G "Unix Makefiles" && cmake --build.

我必须编写 cmake --build 。第二次构建二进制文件,知道我在这里做错了什么吗?

edit 这是构建的结果:

-- Configuring done
-- Generating done
-- Build files have been written to: /Users/laurent/Documents/Delivery/Tek3/CPP/B-CPP-500-LYN-5-1-babel-kevin.melinon/build
-- Conan: Adjusting output directories
-- Conan: Using cmake global configuration
-- Conan: Adjusting language standard
-- Current conanbuildinfo.cmake directory: /Users/laurent/Documents/Delivery/Tek3/CPP/B-CPP-500-LYN-5-1-babel-kevin.melinon/build
-- Conan: Using autogenerated Findportaudio.cmake
-- Library portaudio found /Users/laurent/.conan/data/portaudio/19.7.0/bincrafters/stable/package/22e8f592c814313580425adf77089996d9853e39/lib/libportaudio.dylib
-- Found: /Users/laurent/.conan/data/portaudio/19.7.0/bincrafters/stable/package/22e8f592c814313580425adf77089996d9853e39/lib/libportaudio.dylib
-- Conan: Using autogenerated FindOpus.cmake
CMake Warning (dev) at /usr/local/Cellar/cmake/3.21.3/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:438 (message):
  The package name passed to `find_package_handle_standard_args` (Opus) does
  not match the name of the calling package (opus).  This can lead to
  problems in calling code that expects `find_package` result variables
  (e.g., `_FOUND`) to follow a certain pattern.
Call Stack (most recent call first):
  build/Findopus.cmake:81 (find_package_handle_standard_args)
  CMakeLists.txt:24 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

我无法给出完整的结果。

【问题讨论】:

  • 您可能必须显示为我们生成的文本输出以了解构建问题。
  • 该输出是如何结束的呢?我们需要查看cmake --build . 命令的最终输出。
  • 这里是第一个 cmake --build 的结尾。 :-- Found: /Users/laurent/.conan/data/qt/5.15.2/_/_/package/38dca09af9f0c48f937a38c8ac5f1d5d03a37a22/lib/libQt5Network_debug.dylib -- Configuring done -- Generating done -- Build files have been written to: /Users/laurent/Documents/Delivery/Tek3/CPP/B-CPP-500-LYN-5-1-babel-kevin.melinon/build,这是第二个:[ 50%] Building CXX object CMakeFiles/BABEL.dir/qt/main.cpp.o [100%] Linking CXX executable bin/BABEL [100%] Built target BABEL
  • 我的意思是,它建立了。它在某个地方。
  • 消息-- Build files have been written to: ... 终止配置过程。 (由cmake .. -G "Unix Makefiles"发起)。致电cmake --build . 肯定会产生更多消息。如果这不是你的情况,那么cmake --build. 只是不执行。不要将所有命令放入 && 分隔的序列中,而是尝试手动执行它们,一个接一个。并检查,第一个 cmake --build. 是否给出了关于构建某些东西的通常输出。

标签: c++ cmake conan


【解决方案1】:

所以很明显,把所有的命令写成一个,一个一个的输入就解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2021-03-17
    • 2021-09-08
    • 2020-01-01
    • 1970-01-01
    相关资源
    最近更新 更多