gpt4 book ai didi

linux - 如何在 cmake COMMAND 中回显 shebang

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:41 25 4
gpt4 key购买 nike

我正在使用 cmake 来管理我在 Ubuntu 上的 c++ 项目。

CMakeLists.txt 中,我想添加一个自定义目标来执行一些 linux 命令,这里是:

cmake_minimum_required(VERSION 3.9)
project(MyTest CXX)

add_custom_target(
cov ALL
)

add_custom_command(
TARGET cov
COMMAND touch xxx
COMMAND echo -e '#!/bin/bash'>xxx
)

总之,我想创建一个名为xxx 的文件,并将字符串#!/bin/bash 重定向到其中。但是,当我执行 cmake 时。 && make,我得到一个错误:/bin/sh: 1: 语法错误:未终止的引用字符串。显然是因为 #cmake 视为注释,所以这行变成了 COMMAND echo -e '

我也试过这样:COMMAND bash -c "echo -e '#!/bin/bash>'>xxx",但这给了我一个空的xxx.

最佳答案

Obviously it is because the # is regarded as a comment by cmake so that this line becomes COMMAND echo -e ' .

是的。所以自然而然的做法是引用(对于 CMake)包含 # 字符的文本 ...

COMMAND echo -e "'#!/bin/bash'">xxx

...,或者,我的偏好,转义该字符:

COMMAND echo -e '\#!/bin/bash'>xxx

I've also tried like this: COMMAND bash -c "echo -e '#!/bin/bash'>xxx", but this gave me an empty xxx.

是的,因为双引号 (") 被 CMake 解释并删除。结果等同于在命令行上运行:

bash -c echo -e '#!/bin/bash'>xxx

.您要求 bash 运行的命令只是 echo,没有参数;命令行的其余部分由 bash 解释,而不是传递给 echo

无论如何,您需要理解并适应命令文本的两个(或更多)解释级别的影响,以及它们对转义和引用的各种独立要求。

关于linux - 如何在 cmake COMMAND 中回显 shebang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57328298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com