【发布时间】:2016-03-02 12:08:15
【问题描述】:
在我的问题What can cause a CMake option not work? 之后,我试图找出使用 clean-all.cmake 和手动删除构建目录之间是否有任何区别。运行 clean-all 后,我仍然遇到选项问题。当我删除构建子目录时,我收到以下错误消息:
-- 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)
看起来错误是可重现的:删除构建并打开选项,我收到提到的错误。同时,使用选项OFF,它构建OK。使用那种 clean-all 有什么害处吗?
【问题讨论】:
-
The answer 这是您的
clean-all.cmake脚本的来源明确表示,调用此脚本后的任何 CMake 操作都将不起作用。那么,你想要什么? -
我认为“不起作用”和“导致内部错误”是不同的。 And also, in a second run, when the option is OFF, shall CMake remember that it was ON, until I manually delete build?
-
选项值与其他缓存变量一样,存储在文件
CMakeCache.txt中。如果删除此文件,所有存储的选项值都会丢失。