我只是想使用CMake来检测是否存在GCC的一些内置函数。所以我用check_function_exists
命令做了一些检查工作。这是CMakeLists.txt
中的代码段。
include (CheckFunctionExists)
set (CMAKE_REQUIRED_INCLUDES math.h)
set (CMAKE_REQUIRED_LIBRARIES m)
check_function_exists(sqrt HAVE_SQRT)
check_function_exists (pow HAVE_POW)
check_function_exists (exp HAVE_EXP)
check_function_exists (log HAVE_LOG)
中的代码段
TutorialConfig.h.in
// the configured options and settings for Tutorial
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
#cmakedefine USE_MYMATH
#cmakedefine HAVE_SQRT
#cmakedefine HAVE_POW
#cmakedefine HAVE_LOG
#cmakedefine HAVE_EXP
但是,我在源目录下执行Cmake
命令时的目录。我有这样的错误,很奇怪。
-- The C compiler identification is GNU 7.0.0
-- The CXX compiler identification is GNU 7.0.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for sqrt
CMake Error: The source directory "../build/CMakeFiles/CMakeTmp" does not exist.
Specify --help for usage, or press the help button on the CMake GUI.
CMake Error at /usr/share/cmake/Modules/CheckFunctionExists.cmake:70 (try_compile):
Failed to configure test project build system.
Call Stack (most recent call first):
CMakeLists.txt:23 (check_function_exists)
但是,错误消息中声明的目录确实存在。
$ ls -la ../build/CMakeFiles/CMakeTmp
total 0
drwxrwxrwx 1 root root 0 Apr 14 21:41 .
drwxrwxrwx 1 root root 0 Apr 14 20:32 ..
我不是CMake
的专家,所以我无法弄清楚症结是什么。
这是my log file outputed by CMake
希望任何熟悉CMake的人都能帮助我。提前谢谢。
答案 0 :(得分:1)
错误消息
App Bar
如果将 relative 路径用作构建目录,则可以。
虽然在文档中没有明确说明(并且没有被CMake本身检查过),但最好使用绝对路径作为构建目录。
因为CMake项目的构建目录 并未设计为移动到其他地方(或甚至在其他计算机上),所以没有理由使用它的相对路径。