小编the*_*ker的帖子

使用 CMake 将进程输出作为特定目标的编译选项传递时避免使用引号

我有一个 CMake 的问题:我execute_process()用来设置一个变量,我希望该变量将它作为选项传递给编译器。CMake 在变量周围设置引号,以便编译器得到错误的输入。

具体来说:我只需要使用特定目标编译 SDL2。

# CMakeLists.txt
execute_process(COMMAND "sdl2-config" "--cflags" OUTPUT_VARIABLE SDL2_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
target_compile_options(SpecialTarget PUBLIC ${SDL2_CFLAGS})
Run Code Online (Sandbox Code Playgroud)

的输出sdl2-config --cflags是:

-I/usr/include/SDL2 -D_REENTRANT
Run Code Online (Sandbox Code Playgroud)

CMake 现在以这种方式调用编译器:

/usr/bin/c++ ... "-I/usr/include/SDL2 -D_REENTRANT" ...
Run Code Online (Sandbox Code Playgroud)

这当然行不通。我需要去掉引号。

如果一个使用

add_definitions(${SDL2_CFLAGS})
Run Code Online (Sandbox Code Playgroud)

一切正常。但我需要,target_compile_options因为我不想要所有目标上的选项。

quotes cmake

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

如何使用德语语言环境在gdb中设置双变量?

我正在用gdb调试我的c ++程序.double由于德语区域设置,我很难设置一个简单的变量.

gdb不接受带小数点的值.键入德语小数点(逗号),gdb忽略逗号后的所有内容.

(gdb) p this->foodSupply
$1 = 1
(gdb) set this->foodSupply = 4.3
Ungültige Nummer »4.3«.
(gdb) p this->foodSupply
$1 = 1

(gdb) set this->foodSupply = 4,3
(gdb) p this->foodSupply 
$3 = 4
Run Code Online (Sandbox Code Playgroud)

我想我可以通过运行gdb来避免这个问题LC_ALL=EN gdb ....但是因为在我的IDE工作时并不那么容易,我想知道是否还有其他方法.

德国用户如何在gdb中键入小数点?

c++ gdb

5
推荐指数
1
解决办法
209
查看次数

虚拟继承:当只有一个基类具有“虚拟”关键字时,为什么它起作用?有没有更好的办法?

我想在C ++中实现一个类层次结构:

  • 我需要接口,所以我可以提供多种实现。
  • 我需要所有类中的通用方法。但是我需要能够覆盖特定的方法。
  • 构造函数均采用至少一个参数。

简化我有此代码:

#include <iostream>

class IClass {
public:
    virtual int commonMethod() const = 0;
};

class Class : public virtual IClass {
protected:
    int commonValue;

public:
    Class(int commonValue) : commonValue(commonValue) {}

    virtual int commonMethod() const {
        return commonValue;
    }
};


class IClassDerived : public virtual IClass {
public:
    virtual void specialMethod() = 0;
};

class ClassDerived : public Class, public virtual IClassDerived {
public:
    ClassDerived(int commonValue) : Class(commonValue) {}

    virtual void specialMethod() {
        // do something …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

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

使用 FreeMarker 内置函数在多行上分配变量

我正在尝试使用 FreeMarker 中的内置功能,但在某些情况下遇到问题。

为什么这有效

<#assign foo="bar" />
${foo?trim}
Run Code Online (Sandbox Code Playgroud)

但不是那个

<#assign foo>
    bar
</#assign>
${foo?trim}
Run Code Online (Sandbox Code Playgroud)

我收到这个异常:

FreeMarker template error:
For "?trim" left-hand operand: Expected a string or something automatically convertible to string (number, date or boolean), but this has evaluated to a markup_output (wrapper: f.c.TemplateXHTMLOutputModel):
==> foo  [in template "template.ftl" at line 23, column 7]

----
FTL stack trace ("~" means nesting-related):
    - Failed at: ${foo?trim}  [in template "faq.ftl" at line 23, column 5]
----

Java stack trace (for programmers): …
Run Code Online (Sandbox Code Playgroud)

freemarker

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

标签 统计

c++ ×2

cmake ×1

freemarker ×1

gdb ×1

inheritance ×1

quotes ×1