小编moo*_*f2k的帖子

覆盖 Makefile 中的静态模式规则(不发出警告)

我想使用静态模式规则来指定一类目标的默认配方,但为一些特定目标覆盖该配方。

这是一个简单的例子,说明了我正在尝试做的事情。对于包含文件“test.py”的每个目录,我想调用命令“run_test.py”,除非该目录名为“one”,否则我想调用一组不同的命令:

TESTS := $(shell find * -name "test.py" | xargs -I {} dirname {})

.PHONY: $(TESTS)

all: $(TESTS)

$(TESTS): %:
    python run_test.py $@

one:
    python run_test.py $@ mode=1
    python run_test.py $@ mode=2
    python check_results.py $@
Run Code Online (Sandbox Code Playgroud)

这有效,但会发出警告:

$ make
Makefile:12: warning: overriding commands for target `one'
Makefile:9: warning: ignoring old commands for target `one'
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以做到这一点,或者消除警告吗?

makefile

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

如何在 Docker 容器镜像中创建 tun 接口?

我正在尝试使用/dev/net/tun设备创建 Docker 映像,以便可以在 Linux、Mac 和 Windows 主机上使用该映像。设备不需要访问主机的网络接口。

请注意,传递--device /dev/net/tun:/dev/net/tuntodocker run是不可取的,因为这仅适用于 Linux。

容器启动后,我可以通过运行手动添加设备:

$ sudo mkdir /dev/net
$ sudo mknod /dev/net/tun c 10 200
$ sudo ip tuntap add mode tap tap
Run Code Online (Sandbox Code Playgroud)

但是当我将这些行添加到 Dockerfile 时,它​​会导致错误:

Step 35/46 : RUN mkdir /dev/net
 ---> Running in 5475f2e4b778
Removing intermediate container 5475f2e4b778
 ---> c6f8e2998e1a
Step 36/46 : RUN mknod /dev/net/tun c 10 200
 ---> Running in fdb0ed813cdb
mknod: /dev/net/tun: No such file or directory
The command '/bin/sh -c …
Run Code Online (Sandbox Code Playgroud)

mknod tun docker dockerfile

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

将 CodeMirror 添加到自定义元素的 Shadow Dom 中?

我想在自定义元素内动态创建一个 CodeMirror 实例,并将其存在于元素的 Shadow DOM 内。例如:

<code-mirror>foo</code-mirror>
<script>
window.customElements.define('code-mirror', class extends HTMLElement {
    constructor() {
        super();
        let shadowRoot = this.attachShadow({mode: 'open'});
    }

    connectedCallback() {
        this.cm = CodeMirror(this.shadowRoot, {lineNumbers: true});
    }
});
</script>
Run Code Online (Sandbox Code Playgroud)

这“有效”,但布局完全错误。左边距设置为窗口的宽度,行号显示不正确,并且选择逻辑垂直偏离了几行。

这是一个演示布局问题的 jsfiddle:链接

建议?

javascript web-component codemirror shadow-dom custom-element

3
推荐指数
1
解决办法
1031
查看次数

xcode ld 检测静态库中的重复符号

这个问题以前曾针对gcc提出过,但达尔文的 ld (clang?)似乎以不同的方式处理这个问题。

假设我main()在两个文件 main1.cc 和 main2.cc 中定义了一个函数。如果我尝试将它们一起编译,我将得到(所需的)重复符号错误:

$ g++ -o main1.o -c main1.cc
$ g++ -o main2.o -c main2.cc
$ g++ -o main main1.o main2.o
duplicate symbol _main in:
    main1.o
    main2.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其中之一粘贴到静态库中,当我链接应用程序时,我不会收到错误:

$ ar rcs libmain1.a main1.o
$ g++ -o main libmain1.a main2.o
(no error)
Run Code Online (Sandbox Code Playgroud)

使用 gcc,您可以使用 lib 包装--whole-archive,然后 gcc 的 ld 将产生错误。此选项对于随 …

xcode darwin clang ld

3
推荐指数
1
解决办法
2092
查看次数

在另一个std :: function中包装c ++ 11 std :: function?

我想将一个std :: bind()或lambda的结果包装在一个帮助函数中,该函数跟踪函数调用的执行时间.我想要一个可以使用任意数量的参数(和类方法)的通用解决方案,并且兼容c ++ 11.

我的目的是获取包装函数并将其传递给boost :: signals2 :: signal,因此生成的函数对象需要与原始函数的签名相同.

我基本上正在寻找一些Wrapper像这样工作的神奇类或函数:

std::function<void(int)> f = [](int x) {
    std::cerr << x << std::endl;
};

boost::signals2::signal<void(int)> x_signal;
x_signal.connect(Wrapper<void(int)>(f));
x_signal(42);
Run Code Online (Sandbox Code Playgroud)

这将需要多长时间才能打印42.

谢谢!

c++ boost boost-signals2 c++11

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