相关疑难解决方法(0)

如何跟踪CMakeLists.txt

有没有办法检查cmake在失败的运行中正在做什么?例如,我有一个程序取决于libbacktrace,我可以链接到gcc foo.c -lbacktrace.但是当我写一个CMakeLists.txt喜欢的

cmake_minimum_required(VERSION 2.8)
find_library (BACKTRACE_LIBRARY backtrace)
message (BACKTRACE_LIBRARY=${BACKTRACE_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

和打字cmake <path>,打印出来BACKTRACE_LIBRARY=BACKTRACE_LIBRARY-NOTFOUND.

我该如何找出问题所在?cmake在放弃查找libbacktrace之前执行了哪些命令?它正在执行任何事情吗?在autoconf中,命令都记录在其中config.log,但CMakeOutput.log在这种情况下是空白的.同样,cmake --trace只回显CMakeLists.txt一堆系统cmake文件之后的内容,在这种情况下这是无用的.

请注意,我不是在寻找一种方法来进行这种特殊的find_library工作调用- 这只是一个例子.我的问题是:我有一个没有按预期工作的CMakeLists.txt; 有哪些工具可以帮助我弄清楚它失败的地点和原因?

cmake

19
推荐指数
2
解决办法
2万
查看次数

如何在CMake变量中去掉尾部空格?

我们正在努力改进CMake生产的makefile.对于Clang,GCC和ICC,我们想补充一下-march=native.这样做的块看起来像:

# -march=native for GCC, Clang and ICC on i386, i486, i586, i686 and x86_64.
message(STATUS, "1")
message(STATUS, "Compiler: x${CMAKE_CXX_COMPILER_ID}x")
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
    message(STATUS, "2")
    message(STATUS, "Machine: x${UNAME_MACHINE}x")
    if (("${UNAME_MACHINE}" MATCHES "i.86") OR ("${UNAME_MACHINE}" STREQUAL "x86_64"))
            message(STATUS, "3")
        if (CMAKE_VERSION VERSION_LESS 2.8.12)
            add_definitions(-march=native)
        else()
            add_compile_options(-march=native)
        endif()
    endif()
endif()
Run Code Online (Sandbox Code Playgroud)

消息语句显示机器字符串来自uname具有尾随换行符:

STATUS,1
STATUS,Compiler: xGNUx
STATUS,2
STATUS,Machine: xx86_64
x
Run Code Online (Sandbox Code Playgroud)

要生产的块UNAME_MACHINE是:

# We need the output 'uname -m' for …
Run Code Online (Sandbox Code Playgroud)

text-processing cmake uname

10
推荐指数
3
解决办法
8460
查看次数

如何获得 CMake 的详细输出?

我想调查一下为什么会出现这个错误:

$ cmake ..
-- The C compiler identification is unknown
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /cygdrive/c/Users/Ycr/Home/bin/arm-none-eabi-gcc
-- Check for working C compiler: /cygdrive/c/Users/Ycr/Home/bin/arm-none-eabi-gcc -- broken
CMake Error at /usr/share/cmake-3.6.2/Modules/CMakeTestCCompiler.cmake:61 (message):
  The C compiler "/cygdrive/c/Users/Ycr/Home/bin/arm-none-eabi-gcc" is not
  able to compile a simple test program.
Run Code Online (Sandbox Code Playgroud)

不幸的是,错误发生后:

  • 我不知道 CMake 做了什么。我没有它执行的命令的详细日志。
  • 错误发生后已CMakeFiles/cmTC_e4aa4.dir被清理,因此我无法自己探索该问题。

我应该如何调查这样的错误?

我尝试使用该--debug-trycompile选项。这次 CMake 创建了一个CMakeTmp文件夹,完美无误。但是,我仍然有这个CMakeFiles/cmTC_e4aa4.dir生成错误,甚至使用 CMake 选项取消文件夹链接。

cmake

6
推荐指数
1
解决办法
1万
查看次数

详细cmake:如何获得更多诊断?

我从cmake得到一些奇怪的错误:

loading initial cache file ../../Tweaks/compiler-rt/arm.txt
-- Performing Test COMPILER_RT_HAS_FPIE_FLAG
CMake Error at CMakeLists.txt:2 (set):
  Syntax error in cmake code at

    D:/Work/AcSo/Views/llvmSecond/build-arm/compiler-rt/CMakeFiles/CMakeTmp/CMakeLists.txt:2

  when parsing string

    D:/Work/AcSo/Views/llvmSecond/llvm/projects/compiler-rt/cmake;D:/Work/AcSo/Views/llvmSecond/llvm/projects/compiler-rt/cmake/Modules;D:/Work/AcSo/Views/llvmSecond/llvm/cmake;D:\Work\AcSo\Views\llvmSecond\build-host\Release\lib\cmake\llvm

  Invalid character escape '\W'.


CMake Error: Internal CMake error, TryCompile configure of cmake failed
-- Configuring incomplete, errors occurred!
See also "D:/Work/AcSo/Views/llvmSecond/build-arm/compiler-rt/CMakeFiles/CMakeOutput.log".
Run Code Online (Sandbox Code Playgroud)

我能理解的是它以某种方式得到了一个Windows路径,然后抱怨\W字符序列.实际上我已经尽我所能给cmake Linux路径.所以我不知道Windows路径的来源.这个错误似乎没什么关系CMakeOutput.log

我想从cmake获得更多的诊断,即它是什么以及它为什么,但是搜索"cmake verbose"而不是给出关于制作make详细信息的结果,而不是cmake本身.

有没有办法强制cmake verbose /获得更多的诊断/调试或跟踪输出?或者如果你能说出我的具体案例中的问题,那也是值得赞赏的.

infrastructure build configure cmake verbose

4
推荐指数
1
解决办法
9476
查看次数

如何在 CMake 中使用 cpplint 代码样式检查?

我找到的唯一在线资源是有关CMAKE_<LANG>_CPPLINT此处链接)和此示例(此处链接)的 CMake 文档,但我无法弄清楚如何在 CMakeLists.txt 文件中实际使用它。我尝试了提供的示例,但无法使其正常工作。仅供参考,我按照此处的说明安装了 cpplint 。

到目前为止,我可以使用以下 CMake 命令在 CMakeLists.txt 中运行 cpplint python 脚本:

execute_process(COMMAND cpplint path/To/File/To/Analyse.cpp)
Run Code Online (Sandbox Code Playgroud)

但是,我很确定这不是执行此操作的正确方法。

cmake cpplint

2
推荐指数
1
解决办法
3505
查看次数