来自cmake的sed命令不会更改输入文件

时间:2016-06-14 14:08:52

标签: sed cmake

我想在构建可执行文件之前修改src/some_file.txt

cmake_minimum_required(VERSION 3.5.1)
project(MyProject)

add_custom_target(run ALL
    COMMAND sed -i "s@MY_PATH=\\(.*\\)@MY_PATH=${CMAKE_BINARY_DIR}/\\1@" ${CMAKE_CURRENT_SOURCE_DIR}/some_file.txt
)

add_executable(e main.cpp)
add_dependencies(e run)

src / some_file.txt包含内容:

MY_PATH=something

目标rune获得构建但src/some_file.txt保持不变。为什么呢?

1 个答案:

答案 0 :(得分:1)

要么您没有使用GNU sed,要么该文件与该模式不匹配。

我的猜测是你需要再次逃避反斜杠,但无论如何你都不需要它们,只需使用:

sed -i 's@MY_PATH=@MY_PATH=${CMAKE_BINARY_DIR}/@'

或者只是

sed -i 's@MY_PATH=@&${CMAKE_BINARY_DIR}/@'

其中&扩展为匹配的模式。您应该使用单引号而不是双引号,除非您特别希望shell扩展变量。