首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以导致CMake内部错误吗?

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

Stack Overflow用户
提问于 2016-03-02 20:08:16
回答 1查看 550关注 0票数 0

在我的问题What can cause a CMake option not work?之后,我试图找出使用clean-all.cmake和手动删除构建目录之间是否有任何区别。在运行完所有程序后,我仍然遇到了选择问题。当我删除build子目录时,我收到以下错误消息:

代码语言:javascript
复制
-- 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)

日志文件只包含:

代码语言:javascript
复制
Determining if files pthread.h exist failed with the following output:

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


int main(void){return 0;}

而且,从那时起,系统就一直在提示这个错误。所以,看起来有区别:);它是什么?会不会是我的CMakeLists.txt导致了一些内部错误?

PS:在有了这个永久性错误之后,我开始寻找它的原因,再次构建我的CMakeLists.txt,从删除的构建子目录开始。

一开始,我有

代码语言:javascript
复制
option (CLEAN_ALL "Make a cleanup before building"  OFF)

后来

代码语言:javascript
复制
if(CLEAN_ALL)
include(cmake/clean-all.cmake)
endif(CLEAN_ALL)

而cmake文件是

代码语言:javascript
复制
# 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)

错误看起来是可重现的:删除构建并打开选项后,我收到了提到的错误。同时,在option关闭的情况下,它可以正常构建。使用“一刀切”有什么害处吗?

EN

回答 1

Stack Overflow用户

发布于 2016-03-02 22:02:49

CMake将项目的状态作为文件存储在项目的build目录中。这些文件不受保护,因此对它们的不当修改(如删除)可能会导致项目的状态变得不一致。

消息Internal CMake error表示,如果由CMake和生成的项目构建文件在之外没有损坏,则这(可能)是CMake 中的错误。

否则,这样的错误只是表明项目构建以某种方式中断了。

在给定的情况下,不一致的状态是由于在CMake调用期间删除文件CMakeCache.txt而导致的。The answer是您的clean- all.cmake脚本的来源,显式地告诉,在调用此脚本之后,CMake命令将不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35746820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档