小编Jee*_*eet的帖子

CMake:为ctest设置环境变量(或者自动从ctest/make测试输出失败的测试输出)

我希望ctest默认显示失败的测试输出.也就是说,我想运行:

$ make all test
Run Code Online (Sandbox Code Playgroud)

并且无需查看任何失败测试的输出cat Testing/Temporary/LastTest.log.

似乎有两种方法可以做到这一点:

(1)设置CTEST_OUTPUT_ON_FAILURE环境变量:

 $ CTEST_OUTPUT_ON_FAILURE=1 make all test
 $ # or CTEST_OUTPUT_ON_FAILURE=1 ctest
Run Code Online (Sandbox Code Playgroud)

(2)指定调用的--output-on-failure标志ctest:

 $ ctest --output-on-failure
Run Code Online (Sandbox Code Playgroud)

是否有办法编写CMakeLists.txt文件,以便ctests在默认情况下在正常的"make all test"调用中转储失败的测试输出,而无需在会话中全局导出环境变量或诉诸自定义目标make check(如所描述的)在这里)?

我知道SET_TESTS_PROPERTIES()命令,但尝试这样:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(testenv CXX)
ENABLE_TESTING()
ADD_EXECUTABLE(hello hello.cpp)
ADD_TEST(testhello hello)

# Following sets the environment variable for the shell in which the test
# progoram 'hello' is run, but not the shell in which ctest is run
SET_TESTS_PROPERTIES(testhello
    PROPERTIES …
Run Code Online (Sandbox Code Playgroud)

testing cmake environment-variables ctest output

36
推荐指数
1
解决办法
7617
查看次数

如何将当前视觉选择短语插入命令行?

在命令中输入参数时,我知道我可以键入<C-R><C-W>以在光标下插入单词并在光标下<C-R><C-A>插入WORD.

有没有办法插入当前的视觉选择?

谢谢!

vim

33
推荐指数
2
解决办法
5124
查看次数

如果未在命令行中明确指定,则将安装前缀自动设置为自定义路径

对于某些内部测试,我希望安装前缀默认为build目录的子目录,除非用户明确覆盖.我知道用户可以通过以下方式指定安装前缀:

$ cmake -DCMAKE_INSTALL_PREFIX=/foo/bar ..
Run Code Online (Sandbox Code Playgroud)

但是如果用户没有指定它,它应该默认为,例如${PWD}/installed.

该变量CMAKE_INSTALL_PREFIX已经设置为/usr/local,所以我不能在设置之前检查是否取消设置/清空.

我目前的解决方案是添加一个用户必须调用的自定义开关,以指定CMAKE_INSTALL_PREFIX变量得到遵守:

option(ENABLE_INSTALL_PREFIX "Install build targets to system (path given by '-DCMAKE_INSTALL_PREFIX' or '${CMAKE_INSTALL_PREFIX}' if not specified)." OFF)
if ( ENABLE_INSTALL_PREFIX )
    set (CMAKE_INSTALL_PREFIX installed CACHE PATH "Installation root")
else()
    set (CMAKE_INSTALL_PREFIX installed CACHE PATH "Installation root" FORCE)
endif()
Run Code Online (Sandbox Code Playgroud)

我的问题是:

(a)除了需要传递给CMake以获得CMAKE_INSTALL_PREFIX效果的额外标志的烦恼之外,上述是否有任何问题?

(b)是否有更好,更清洁,更强大,更惯用和/或更不烦人的方式来实现上述目标?

谢谢.

install cmake prefix

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

Sphinx和Docstrings中的RestructuredText:单引号与双引号或反向引号差异

从文档中可以看出,双引号用于文字,而单引号则在有代码文本被解释时使用.

这将导致我为f()下面的方法编写docstring :

class A(B):

    def f(arg1, arg2):
        return B(arg1 + arg2 + self.index)
Run Code Online (Sandbox Code Playgroud)

如:

Takes two arguments, ``arg1` and ``arg2``, which are assumed to be objects
of type (or duck-type) `NiceClass`, and returns a new object of class `B`
with `B.something` assigned some hash of ``arg1`` and ``arg2``.
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?

在许多代码示例中,Sphinx和其他方面,我看到相当于BNiceClass用双引号括起来("``B``"和"``NiceClass``").

python restructuredtext docstring python-sphinx

17
推荐指数
2
解决办法
2531
查看次数

将使用auto-keyword声明的lambda通过非const引用作为参数传递给std :: function参数类型

请考虑以下代码:

#include <iostream>
#include <functional>

// passing function object by value
void foo(std::function<int(int, int)> f) {
    std::cout << f(3, 7) << std::endl;
}

// passing const function object by reference
void bar(const std::function<int(int, int)> & f) {
    std::cout << f(3, 7) << std::endl;
}

// passing non-const function object by reference
void fizz(std::function<int(int, int)> & f) {
    std::cout << f(3, 7) << std::endl;
}

int main() {

    std::function<int(int, int)> g1 = [] (int x, int y) { return x * …
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11

9
推荐指数
1
解决办法
2170
查看次数

C++ 11:通过引用或值传递(lambda或其他)函数对象?

这本来是这个问题的一部分:

将使用auto-keyword声明的lambda通过非const引用作为参数传递给std :: function参数类型

但我决定把它分开.

在什么情况下通过引用或值传递lambda或其他函数对象更好/更惯用?

c++ lambda reference c++11

9
推荐指数
1
解决办法
2603
查看次数

如何在上一个/下一个光标位置之间来回跳转,仅限于当前缓冲区?

我喜欢的功能<C-O><C-I>去来回不同的位置.但很多时候我宁愿呆在当前的缓冲区内,当一个新的缓冲区打开替换我正在看的那个缓冲区时总是会感到惊讶.

(1)有没有办法实现这个目标?即,限制<C-O><C-I>相同的缓冲区?

(2)有没有办法访问所有光标移动,即使那些通常不被认为是跳跃的移动,例如10k

vim

7
推荐指数
1
解决办法
1729
查看次数

检查Vim中是否存在来自命令调用的函数的当前活动视觉选择

情况#1:我刚刚选择了一个文本块.然后我输入":Command",它会调用一些函数.

情况#2:目前没有视觉选择(尽管我之前在编辑会话中做过这样的选择).我输入":Command",它调用(相同的)函数.

是否有(强大的)方法将上述两种情况与功能区分开来?我试过了mode(),但问题是在这两种情况下我都处于命令模式,虽然在第一种情况下我从可视模式进入命令模式,而在第二种情况下我从正常模式进入.也许通过检查a:firstline/ a:lastline/ v:count


更新 - 用例示例:" :Sum".如果存在当前视觉选择,例如,一列数字(块选择)或仅包含数字的一系列行,则该命令将回显数字的总和.否则,它需要一个以空格分隔的数字列表作为参数,并将回显这些数字的总和.基本框架:

command! -nargs="*" -range Sum :call CalcSum(<f-args>)
function! CalcSum(...) range
   " 1. collect numbers from visual selection if there is a current active selection
   " 2. otherwise, if len(args) > 0, collect numbers from args
   " 3. other cases (i.e., no selection and no args or both selection and args) handled reasonably
   " 4. sum collection of numbers
   " 5. return/echo result
endfunction 
Run Code Online (Sandbox Code Playgroud)

步骤(2) - …

vim

7
推荐指数
1
解决办法
1429
查看次数

Vim脚本编译TeX源并仅在没有错误时启动PDF

我正在切换到使用Vim进行我的LaTeX编辑环境.我希望能够在Vim中编写源文件,并在编译成功时启动外部查看.

我知道Vim-Latex套件,但是,如果可能的话,宁愿避免使用它:它非常重,劫持了很多我的密钥,并且用大量文件使我的vimruntime混乱.

这就是我现在拥有的:

if exists('b:tex_build_mapped')
    finish
endif
" use maparg or mapcheck to see if key is free
command! -buffer -nargs=* BuildTex call BuildTex(0, <f-args>)
command! -buffer -nargs=* BuildAndViewTex call BuildTex(1, <f-args>)
noremap <buffer> <silent> <F9> <Esc>:call BuildTex(0)<CR>
noremap <buffer> <silent> <S-F9> <Esc>:call BuildTex(1)<CR>
let b:tex_build_mapped = 1

if exists('g:tex_build_loaded')
    finish
endif
let g:tex_build_loaded = 1

function! BuildTex(view_results, ...)
    write
    if filereadable("Makefile")
        " If Makefile is available in current working directory, run 'make' with arguments
        echo "(using Makefile)" …
Run Code Online (Sandbox Code Playgroud)

vim latex pdflatex

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

如何让CMake在系统路径上使用默认编译器?

目前,我从我的构建目录中调用CMake,如下所示:

CXX ="/ opt/gcc-4.8/bin/g ++"cmake ..

让CMake使用这个特定的编译器.否则它使用操作系统默认编译器.

我的PATH /opt/gcc-4.8/bin在其他一切方面都有" ".那么,而不是预先设置环境变量是否有办法在"`CMakeLists.txt"文件中指定在路径上使用默认的g ++?

compiler-construction cmake

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