Что является ошибкой outofsource от cmake

Я пытаюсь что-то скомпилировать с помощью cmake, и он выдает ошибку о том, что требуется из источника. Как я могу узнать больше об этой ошибке, пожалуйста? Вот вывод

C:\Users\sansari\Downloads\tpm_emulator-0.7.4\tpm_emulator-0.7.4\build>cmake ../
CMake Error at CMakeLists.txt:17 (message):
  TPM_Emulator requires an out of source build.


-- Configuring incomplete, errors occurred!
See also "C:/Users/sansari/Downloads/tpm_emulator-0.7.4/tpm_emulator-0.7.4/CMakeFiles/CMakeOutput.log".

Вот содержимое CMakeLists.txt

# Software-based Trusted Platform Module (TPM) Emulator
# Copyright (C) 2004-2010 Mario Strasser <mast@gmx.net>
#
# $Id: CMakeLists.txt 475 2011-12-20 18:21:19Z mast $

project(TPM_Emulator C)

cmake_minimum_required(VERSION 2.4)
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif()

# enforce out of source build
string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" IS_INSOURCE)
if(IS_INSOURCE)
    message(FATAL_ERROR "${PROJECT_NAME} requires an out of source build.")
endif()

# set project and build version
set(${PROJECT_NAME}_VERSION_MAJOR 0)
set(${PROJECT_NAME}_VERSION_MINOR 7)
string(REGEX REPLACE ".*Revision: ([0-9]+).*" "\\1" ${PROJECT_NAME}_VERSION_BUILD "$Revision: 475 $")

# create project configuration
if(WIN32)
STRING(REGEX REPLACE "\\\\" "/" PROGRAMFILES "$ENV{PROGRAMFILES}/${PROJECT_NAME}")
set(TPM_LOG_FILE "${PROGRAMFILES}/tpmd.log")
set(TPM_STORAGE_NAME "${PROGRAMFILES}/tpm_emulator-1_2_${${PROJECT_NAME}_VERSION_MAJOR}_${${PROJECT_NAME}_VERSION_MINOR}
")
set(TPM_DEVICE_NAME "//./pipe/tpmd:0")
elseif(APPLE)
set(TPM_LOG_FILE "/private/var/log/tpmd.log")
set(TPM_SOCKET_NAME "/private/var/run/tpm/tpmd_socket:0")
set(TPM_STORAGE_NAME "/private/var/lib/tpm/tpm_emulator-1_2_${${PROJECT_NAME}_VERSION_MAJOR}_${${PROJECT_NAME}_VERSION_MINOR}")
set(TPM_DEVICE_NAME "/dev/tpm")
else()
set(TPM_LOG_FILE "/var/log/tpmd.log")
set(TPM_SOCKET_NAME "/var/run/tpm/tpmd_socket:0")
set(TPM_STORAGE_NAME "/var/lib/tpm/tpm_emulator-1_2_${${PROJECT_NAME}_VERSION_MAJOR}_${${PROJECT_NAME}_VERSION_MINOR}")
set(TPM_DEVICE_NAME "/dev/tpm")
endif()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
add_definitions(-Wall -Werror -Wno-unused-parameter -Wpointer-arith -Wcast-align -Wwrite-strings)
if("${CMAKE_SYSTEM}" MATCHES "Linux")
    add_definitions(-Wextra)
endif()
if(USE_OPENSSL)
    add_definitions(-DUSE_OPENSSL)
endif()
include_directories("/opt/local/include")
link_directories("/opt/local/lib")

# configure CPack
set(CPACK_PACKAGE_VERSION_MAJOR ${${PROJECT_NAME}_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${${PROJECT_NAME}_VERSION_MINOR})
set(CPACK_SOURCE_PACKAGE_FILE_NAME "tpm_emulator-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.4")
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_IGNORE_FILES ".svn/" "/build/" "/.project" "/.cproject")
set(CPACK_GENERATOR "ZIP")
set(CPACK_SET_DESTDIR ON)
include(CPack)

# include root directories
include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_BINARY_DIR})

# add internal libraries
add_subdirectory(tpm)
add_subdirectory(mtm)
add_subdirectory(crypto)

# add TDDL
add_subdirectory(tddl)

# add kernel modules
add_subdirectory(tpmd_dev)

# add executables
add_subdirectory(tpmd)

@ Дэн Шеплер - Спасибо. Я удалил источник и снова распаковал его. Теперь я получаю другое сообщение следующим образом:

$ cmake ../
-- The C compiler identification is unknown
CMake Error at CMakeLists.txt:6 (project):
  The CMAKE_C_COMPILER:

    cl

  is not a full path and was not found in the PATH.

  To use the NMake generator with Visual C++, cmake must be run from a shell
  that can use the compiler cl from the command line.  This environment is
  unable to invoke the cl compiler.  To fix this problem, run cmake from the
  Visual Studio Command Prompt (vcvarsall.bat).

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


-- Configuring incomplete, errors occurred!
See also "C:/Users/sansari/Downloads/tpm_emulator-0.7.4/tpm_emulator-0.7.4/build/CMakeFiles/CMakeOutput.log".
See also "C:/Users/sansari/Downloads/tpm_emulator-0.7.4/tpm_emulator-0.7.4/build/CMakeFiles/CMakeError.log".
Given that I have installed MinGw. I believe I have to set my compiler as gcc. And I believe this would be my path

C:\MinGW\bin

Я только что сделал эти две команды, чтобы установить переменные окружения на путь к компилятору, который я знаю, но я все еще получаю ошибку. Я видел gcc.exe в C:\MinGw\bin. Я попытаюсь добавить имя gcc.exe в путь к переменной среды.

set CC=C:\MinGW\bin



set CMAKE_C_COMPILER=C:\MinGW\bin

Я нашел переменную, которую мне нужно изменить, в каталоге сборки и изменил ее. Теперь это говорит

$ cmake ../
-- The C compiler identification is GNU 4.9.3
-- Check for working C compiler: C:/MinGW/bin/gcc.exe
CMake Error: Generator: execution of make failed. Make command was: "nmake" "/NOLOGO" "cmTC_5e307\fast"
-- Check for working C compiler: C:/MinGW/bin/gcc.exe -- broken
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.5/Modules/CMakeTestCCompiler.cmake:61 (message):
  The C compiler "C:/MinGW/bin/gcc.exe" is not able to compile a simple test
  program.

  It fails with the following output:

   Change Dir: C:/Users/sansari/Downloads/tpm_emulator-0.7.4/tpm_emulator-0.7.4/build/CMakeFiles/CMakeTmp



  Run Build Command:"nmake" "/NOLOGO" "cmTC_5e307\fast"



  Generator: execution of make failed.  Make command was: "nmake" "/NOLOGO"
  "cmTC_5e307\fast"





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:6 (project)


-- Configuring incomplete, errors occurred!
See also "C:/Users/sansari/Downloads/tpm_emulator-0.7.4/tpm_emulator-0.7.4/build/CMakeFiles/CMakeOutput.log".
See also "C:/Users/sansari/Downloads/tpm_emulator-0.7.4/tpm_emulator-0.7.4/build/CMakeFiles/CMakeError.log".

Я нашел эту ссылку и проверил мою переменную пути в Windows 10. На самом деле мне пришлось добавить путь пользователя; У меня просто был системный путь. Я поместил MInGw\bin, msys\bin и msys\local\bin и cmake в мой путь.

Я думаю, что это сработало на этот раз. Что я сделал, я использовал cmd, работающий в режиме администратора, а не оболочку MinGw. Вот вывод...

C:\Users\sansari\Downloads\tpm_emulator-0.7.4\tpm_emulator-0.7.4\build>cmake ../
-- The C compiler identification is GNU 4.9.3
-- Check for working C compiler: C:/MinGW/bin/gcc.exe
-- Check for working C compiler: C:/MinGW/bin/gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/sansari/Downloads/tpm_emulator-0.7.4/tpm_emulator-0.7.4/build

1 ответ

Решение

Сообщение явно выводится этой строкой:

    message(FATAL_ERROR "${PROJECT_NAME} requires an out of source build.")

Обычно я не ожидаю, что условие if будет запущено на основе cmake Команда, которую вы дали. Сначала я бы проверил, есть ли какие-нибудь артефакты CMake в исходном каталоге. C:\Users\sansari\Downloads\tpm_emulator-0.7.4\tpm_emulator-0.7.4 от предыдущей попытки настройки, которая может привести к отказу CMake от использования вашего каталога сборки. Если это так, то удалите CMakeCache.txt, CMakeFiles/ etc из исходного каталога (или просто удалите весь исходный каталог и распакуйте его снова). В противном случае, чтобы отладить происходящее, я бы временно вставил нечто подобное прямо над if(IS_INSOURCE) заявление:

message(STATUS "CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message(STATUS "CMAKE_BINARY_DIR = ${CMAKE_BINARY_DIR}")
message(STATUS "IS_INSOURCE = ${IS_INSOURCE}")
Другие вопросы по тегам