我遇到了一个关于bash和cmake以及引号的繁琐问题。 我需要使用不同的cmake标志多次编译程序。经过很多猜测,我在bash脚本中想出了以下结构:
cmake_params[1]=-DCMAKE_CXX_FLAGS=-O2\ -DNDEBUG
cmake_params[2]=-DCMAKE_CXX_FLAGS=-march=native\ -O2\ -DNDEBUG
# ....
#compile with:
for i in {1..n}
do
# .. prepare ..
mkdir build
cd build
cmake "${cmake_params[$i]}" ..
make
done
请注意,我在cmake_params中转义了空格,并使用双引号调用了cmake。但是,最终,我需要能够将标志扩展到像这样糟糕的东西:
cmake_params[1]=-DCMAKE_CXX_COMPILER="clang++"\
-DCMAKE_C_COMPILER="clang"\
-DCMAKE_CXX_FLAGS=-march=native\ -O3\ -DNDEBUG\
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=true\
-DCMAKE_POLICY_DEFAULT_CMP0069=NEW
但那样行不通。我尝试在CXX标志周围加上引号,省略编译器周围的引号以及省略实际cmake调用周围的引号,但都没有成功。错误消息各不相同,其中最突出的一个是:
The CMAKE_CXX_COMPILER:
clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_FLAGS=-march=native -O3 -DNDEBUG
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=true -DCMAKE_POLICY_DEFAULT_CMP0069=NEW
is not a full path and was not found in the PATH.
很明显,CMake错误解释了我的命令行。为了更加清晰,我想要将clang++作为CMAKE_CXX_COMPILER
传递,并将-march=native -O3 -DNDEBUG
作为CMAKE_CXX_FLAGS
传递。
哪个bash脚本可以实现这一点,原因是什么?是否有关于引号和参数传递的资源?我尝试了一个又一个方法来找到可行的方案,但那甚至都不是瞎猜..