Передача флагов компилятора g ++, хранящихся в переменной, не работает должным образом - PullRequest
0 голосов
/ 12 октября 2018

Итак, у меня есть файл 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 голосов
/ 12 октября 2018

Не используйте переменные для хранения контента, который является списком, используйте массивы!Кроме того, ~ не раскрывается под кавычками (одинарными или двойными)

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
          )

и не запускает расширение в кавычках, чтобы не допустить разбиения аргументов при наличии специальных символов.

g++ nginx.cpp "${myVarArgs[@]}"
0 голосов
/ 12 октября 2018

Расширение тильды происходит до раскрытия переменной, поэтому ~ в переменной не раскрывается оболочкой в ​​ваш домашний каталог.Используйте полный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...