传递存储在变量中的g ++编译器标志无法正常工作

时间:2018-10-12 07:31:09

标签: shell terminal

所以我有一个example.cpp文件,必须使用g ++进行编译。

$ g++ nginx.cpp libuaparser_cpp.a -I ~/Desktop/boost_1_68_0/  -I /usr/local/mysql-connector-c++-8.0.12/include/jdbc/ -L /usr/local/mysql-connector-c++-8.0.12/lib64/  -L ~/Desktop/boost_1_68_0/stage/lib   -L /usr/local/lib/  -L /Users/Shray/Desktop/boost_1_68_0/stage/lib/ ~/Desktop/boost_1_68_0/stage/lib/libboost_regex.a  -lyaml-cpp -lboost_regex -std=c++11  -lmysqlcppconn

所以我没有写太多东西,而是将其余参数放在终端的变量中。

$ myvar="libuaparser_cpp.a -I ~/Desktop/boost_1_68_0/  -I /usr/local/mysql-connector-c++-8.0.12/include/jdbc/ -L /usr/local/mysql-connector-c++-8.0.12/lib64/  -L ~/Desktop/boost_1_68_0/stage/lib   -L /usr/local/lib/  -L /Users/Shray/Desktop/boost_1_68_0/stage/lib/ ~/Desktop/boost_1_68_0/stage/lib/libboost_regex.a  -lyaml-cpp -lboost_regex -std=c++11  -lmysqlcppconn"

$ g++ nginx.cpp $myvar

但这给我一个错误。

clang: error: no such file or directory: '~/Desktop/boost_1_68_0/stage/lib/libboost_regex.a'

为什么会出现此错误?由于我只是添加变量值。任何帮助将非常感激。

2 个答案:

答案 0 :(得分:0)

波浪线扩展发生在变量扩展之前,因此外壳程序不会将变量~扩展到您的主目录。使用完整路径。

答案 1 :(得分:0)

不要使用变量存储列表中的内容,而要使用数组!另外,~不会在引号(单引号或双引号)下展开

myVarArgs=()
myVarArgs=( libuaparser_cpp.a 
           -I ~/Desktop/boost_1_68_0/
           -I /usr/local/mysql-connector-c++-8.0.12/include/jdbc/
           -L /usr/local/mysql-connector-c++-8.0.12/lib64/
           -L ~/Desktop/boost_1_68_0/stage/lib
           -L /usr/local/lib/
           -L /Users/Shray/Desktop/boost_1_68_0/stage/lib/
           ~/Desktop/boost_1_68_0/stage/lib/libboost_regex.a  
           -lyaml-cpp 
           -lboost_regex 
           -std=c++11  
           -lmysqlcppconn
          )

并运行全引号的扩展名,以防止args在出现特殊字符时破裂。

g++ nginx.cpp "${myVarArgs[@]}"