Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以导致CMake内部错误吗?_Cmake_Internal - Fatal编程技术网

我可以导致CMake内部错误吗?

我可以导致CMake内部错误吗?,cmake,internal,Cmake,Internal,在我的问题之后,我试图找出使用clean-all.cmake和手动删除构建目录之间是否有任何区别。在运行clean all之后,我仍然遇到选项问题。删除build子目录时,我收到以下错误消息: -- Looking for include file pthread.h -- Looking for include file pthread.h - not found CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage CMake

在我的问题之后,我试图找出使用clean-all.cmake和手动删除构建目录之间是否有任何区别。在运行clean all之后,我仍然遇到选项问题。删除build子目录时,我收到以下错误消息:

-- Looking for include file pthread.h
-- Looking for include file pthread.h - not found
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: Internal CMake error, TryCompile configure of cmake failed
CMake Error at /usr/local/share/cmake-3.2/Modules/FindPackageHandleStandardArgs.cmake:138 (message):
  Could NOT find Threads (missing: Threads_FOUND)
Call Stack (most recent call first):
  /usr/local/share/cmake-3.2/Modules/FindPackageHandleStandardArgs.cmake:374 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/share/cmake-3.2/Modules/FindThreads.cmake:204 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  cmake/Dependencies.cmake:11 (find_package)
  CMakeLists.txt:53 (include)
并且日志文件仅包含:

Determining if files pthread.h exist failed with the following output:

Source:
/* */
#include <pthread.h>


int main(void){return 0;}
后来

cmake文件是

# clean-all.cmake
# Cleans all subdirectories in the build subdirectory
set(cmake_generated ${CMAKE_BINARY_DIR}/CMakeCache.txt
                    ${CMAKE_BINARY_DIR}/cmake_install.cmake  
                    ${CMAKE_BINARY_DIR}/Makefile
                    ${CMAKE_BINARY_DIR}/CMakeFiles
# Above this, the common directories, below the project-specific ones                    
                    ${CMAKE_BINARY_DIR}/bin
                    ${CMAKE_BINARY_DIR}/lib
                    ${CMAKE_BINARY_DIR}/QtGUI
                    ${CMAKE_BINARY_DIR}/test
)

foreach(file ${cmake_generated})

  if (EXISTS ${file})
     file(REMOVE_RECURSE ${file})
  endif()

endforeach(file)

看起来这个错误是可以重现的:删除构建并打开选项,我收到了上面提到的错误。同时,关闭选项后,它将生成OK。使用“全部清除”有什么害处吗?

CMake将项目的状态作为文件存储在项目的生成目录中。这些文件不受保护,因此对其进行不适当的修改(如删除)可能会导致项目状态不一致

消息
Internal CMake error
表示,如果由CMake生成的项目生成文件未在外部损坏,则这(可能)是CMake内的错误

否则,这样的错误只是表明项目构建在某种程度上被破坏了


在给定的情况下,不一致状态是由在CMake调用期间删除文件
CMakeCache.txt
引起的。这是您的
clean-all.cmake
script的来源,它明确表示调用此脚本后,没有任何cmake命令会起作用。

这是您的
clean-all.cmake
脚本的来源,它明确表示调用此脚本后的任何cmake操作都不会起作用。那么,你想要什么呢?我认为“不起作用”和“导致内部错误”是不同的。另外,在第二次运行中,当选项关闭时,在我手动删除构建之前,CMake是否记得它已打开?选项的值与其他缓存变量一样,存储在文件
CMakeCache.txt
中。如果删除此文件,则所有存储选项的值都将丢失。
if(CLEAN_ALL)
include(cmake/clean-all.cmake)
endif(CLEAN_ALL)
# clean-all.cmake
# Cleans all subdirectories in the build subdirectory
set(cmake_generated ${CMAKE_BINARY_DIR}/CMakeCache.txt
                    ${CMAKE_BINARY_DIR}/cmake_install.cmake  
                    ${CMAKE_BINARY_DIR}/Makefile
                    ${CMAKE_BINARY_DIR}/CMakeFiles
# Above this, the common directories, below the project-specific ones                    
                    ${CMAKE_BINARY_DIR}/bin
                    ${CMAKE_BINARY_DIR}/lib
                    ${CMAKE_BINARY_DIR}/QtGUI
                    ${CMAKE_BINARY_DIR}/test
)

foreach(file ${cmake_generated})

  if (EXISTS ${file})
     file(REMOVE_RECURSE ${file})
  endif()

endforeach(file)