我试图使用Boost.Tokenizer库.在我PROG.cpp,我有以下内容:
#include <boost/tokenizer.hpp>
Run Code Online (Sandbox Code Playgroud)
而我Makefile最初是这样的
CXX = g++-4.8
CXXFLAGS = ## some irrelevant flags
LDFLAGS = ## some irrelevant flags
SOURCES = PROG.cpp
OBJECTS = $(SOURCES:.cpp=.o)
TARGETS = PROG
$(TARGETS) : $(OBJECTS)
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
## other targets
Run Code Online (Sandbox Code Playgroud)
它无法编译,因为boost/tokenizer.hpp无法找到:
fatal error: boost/tokenizer.hpp: No such file or directory
Run Code Online (Sandbox Code Playgroud)
然后我手动添加了boost include路径CXXFLAGS:
-I/opt/local/include/
Run Code Online (Sandbox Code Playgroud)
(这是MacPorts的路径.)
然后我试图包括标记生成器库,但在/opt/local/lib/我libboost_atomic-mt.dylib,libboost_chrono-mt.dylib等等,但没有像tokenizer.那个时候我很困惑.我认为由于图书馆没有被链接,所以仍然无法工作.令人惊讶的是,该程序的构建,链接和运行完美.
所以我现在真的很困惑.以下是一些问题:
(1)我没有明确地链接到boost,所以boost被链接器视为标准库?
(2)如果将boost视为标准处理,为什么标题不是标准的?
(3)为什么有libboost_atomic-mt.dylib,libboost_chrono-mt.dylib等,但不tokenizer?哪个动态库 …
我想使用 shell 脚本来递归删除某个目录中以前缀._(匹配模式._*)开头的所有文件,但令人尴尬的是,除了非常基本的之外,我几乎对 shell 脚本一无所知。有没有好心人帮我写一篇?谢谢。
我知道我可以通过设置LD_LIBRARY_PATH等修改库搜索路径,但这种方法有时很蹩脚。我真的很想/usr/local/lib在默认路径中使用它,但不幸的是,这在 GNU/Linux 中似乎不是默认路径。(我之前遇到过很多问题/usr/local/lib,安装相同的库可以/usr/lib解决这些问题。但我真的不想搞乱/usr/lib。)
那么,是否可以一劳永逸地修改默认库路径呢?谢谢。
我不知道在使用 zsh j:string:数组扩展序列时如何转义冒号。
在我的 ~/.zshrc 中,我发现将 PATH 构建为数组是令人愉快的。
path_array=(
/sbin
/usr/sbin
$HOME/brew/bin
/bin
/usr/bin
/usr/local/bin
/opt/X11/bin
)
#https://unix.stackexchange.com/questions/23208/building-paths-robustly/23241#23241
#export PATH=${(j:::)path_array}
Run Code Online (Sandbox Code Playgroud)
有很多关于如何在其他字符上连接数组的示例,但不幸的是我看不到如何转义字符“:”,因此我可以按此顺序使用它。
结果是:zsh: error in flags
使用另一个字符('|')它工作正常
echo ${(j:|:)path_array}
/sbin|/usr/sbin|/Users/mf/brew/bin|/bin|/usr/bin|/usr/local/bin|/opt/X11/bin
Run Code Online (Sandbox Code Playgroud) 在Linux环境中进行软件开发时有三种选择:
我通常将我的所有开发都视为"根",但这是最佳实践吗?