以下我的问题What can cause a CMake option not work?我试图找出使用clean-all.cmake和手动删除build目录是否有区别。运行clean-all后,我仍然遇到选项问题。当我删除了build子目录,我收到以下错误信息:我可以导致CMake内部错误吗?
-- 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;}
而且,由于是,该系统一直告诉这个错误。所以,它看起来有区别:);它是什么?我的CMakeLists.txt可能导致一些内部错误吗? PS:在发生这个永久性错误之后,我开始寻找它的原因,再次构建我的CMakeLists.txt,从删除的构建子目录开始。
在开始的时候,我有
option (CLEAN_ALL "Make a cleanup before building" OFF)
后
if(CLEAN_ALL)
include(cmake/clean-all.cmake)
endif(CLEAN_ALL)
和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。使用那个干净的东西有什么不好吗?
[the answer](http://stackoverflow.com/a/13714219/3440745)这是你的'clean-all.cmake'脚本的起源**明确地说**,调用这个脚本之后的任何CMake动作不管用。所以你想要什么? – Tsyvarev
我认为“不起作用”和“导致内部错误”,是不同的。另外,在第二次运行中,当选项关闭时,CMake是否应该记住它已打开,直到我手动删除构建? – katang
与其他缓存变量一样,选项的值存储在文件'CMakeCache.txt'中。如果删除此文件,则所有存储的选项值都将丢失。 – Tsyvarev