在Linux机器上,从cmake项目,我正在尝试使用execute_process调用git,以便我可以将源控件中的信息包含到我的应用程序中.
我创建了一个小测试来尝试打印git版本:
cmake_minimum_required (VERSION 2.8)
set (git_cmd "/usr/bin/git --version")
#set (git_cmd "ls") # returns success if you uncomment this line
message(STATUS "git cmd: ${git_cmd}")
execute_process(COMMAND ${git_cmd}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_ver)
message(STATUS "git ver[${git_result}]: ${git_ver}")
configure_file (
"${PROJECT_SOURCE_DIR}/versionInfo.h.in"
"${PROJECT_BINARY_DIR}/versionInfo.h"
)
Run Code Online (Sandbox Code Playgroud)
运行make时,它给出以下输出:
-- git cmd: /usr/bin/git --version
-- git ver[No such file or directory]:
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rsanderson/build/githash:
Run Code Online (Sandbox Code Playgroud)
但是,如果我将命令更改为ls结果有效,我会看到dir列表打印.我还检查了哪个git确实在/ usr/bin中.
我在这里缺少什么想法?
我有一个记录事情的程序STDOUT.
这些日志条目具有关联的"日志级别"(调试,警告,信息等),我想让用户能够为此输出着色,具体取决于日志级别.
确定是否STDOUT附加到具有彩色功能的终端的方法是什么?那我怎么能用颜色输出我的文字呢?
我正在寻找一个只涉及C或C++调用的解决方案.我猜curses(或ncurses)有一些东西可以缓解这一点,但我想避免使用它来保持我的依赖关系最小化.
我无法在Android设备上正确放置固件,我不断得到:
<3>[ 3590.997375] usb 3-1.4: ath9k_htc: Firmware - htc_7010.fw not found
Run Code Online (Sandbox Code Playgroud)
如果在运行Ubuntu的标准linux机器上,我将htc_7010.fw放在/ lib/firmware中,那么我不会收到此错误.
但是,如果我将此固件放在Android上的/ lib/firmware中,我仍然会收到错误消息.我已经尝试了以下所有目录,但仍然收到错误:
/lib/firmware
/etc/firmware
/system/lib/modules
/system/lib/firmware
/system/etc
Run Code Online (Sandbox Code Playgroud)
没有这样的运气......什么决定固件应该在哪里,以及如何确定它正在扫描固件的目录?
当我第一次在Windows 10上开始使用Docker时,一切都很棒.我可以绑定挂载一个本地目录并以交互方式乱搞这样的事情:
docker run -it -v ${PWD}:/app -w /app ubuntu:trusty /bin/bash
Run Code Online (Sandbox Code Playgroud)
哪个应该将内容从本地机器上的当前目录复制到容器中,然后启动我进入交互式Bash shell,我可以在其中看到它们ls,执行它们等.
但是现在我在一个月左右的时间回到它,当我有一个我想用Docker解决的真实项目时,我不能重复我之前的成功.
现在,当我运行上面的交互式命令时,该/app目录是在容器中创建的,但是没有来自我本地磁盘的文件.我尝试了其他一些我一直在使用的非交互式Docker命令,但它们也失败了,因为它们似乎也看不到文件.
PS C:\Users\xxx\app> docker run -v ${PWD}:/app -w /app ubuntu:trusty ./startup.sh
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"./startup.sh\": stat ./startup.sh: no such file or directory": unknown.
Run Code Online (Sandbox Code Playgroud) 当你想迭代std :: set时,什么是BOOST_FOREACH的最佳替代方案?
当我尝试做一个似乎是一个合理的方法来迭代一个集合时,我得到了编译错误.这段代码:
set<string> nameSet;
string aName;
BOOST_FOREACH(nameSet, aName) {
cout << aName << endl;
}
Run Code Online (Sandbox Code Playgroud)
使用gcc 4.4.3生成此编译错误:
error: no match for ‘operator=’ in ‘nameSet = boost::foreach_detail_::deref [with T = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, C = mpl_::bool_<false>](((const boost::foreach_detail_::auto_any_base&)((const boost::foreach_detail_::auto_any_base*)_foreach_cur70)), 0u)’
Run Code Online (Sandbox Code Playgroud)
根据这个链接,这两个是不兼容的,因为std :: set :: iterator必须允许它所引用的值的变异.
我可以想到一些火腿方法,但我想知道是否有更简洁的方法来迭代集合.
我想使用awk在匹配的字符串中搜索字符串.但是我发现的awk 指南和示例只使用了一个匹配,或者有希望听起来SO问题的答案非常具体,以至于我不能轻易地从他们那里得出一般原则来解决我的问题.
例如,我想从cat /proc/bus/input/devices具有如下文本的命令获取"Thinkpad Extra Buttons"设备的事件处理程序编号:
I: Bus=0011 Vendor=0001 Product=0001 Version=ab54
N: Name="AT Translated Set 2 keyboard"
H: Handlers=sysrq kbd event3
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
I: Bus=0019 Vendor=17aa Product=5054 Version=4101
N: Name="ThinkPad Extra Buttons"
P: Phys=thinkpad_acpi/input0
H: Handlers=rfkill kbd event7
B: KEY=18040000 0 10000000000000 0 101501b00102004 8000000001104000 e000000000000 0
I: Bus=0003 Vendor=04f2 Product=b2ea Version=0518
N: Name="Integrated Camera"
P: Phys=usb-0000:00:1a.0-1.6/button
Run Code Online (Sandbox Code Playgroud)
产生类似的输出
H: Handlers=rfkill kbd event7
Run Code Online (Sandbox Code Playgroud)
使用记录范围模式我可以只抓取"Thinkpad Extra Buttons"块,但是然后尝试添加另一个搜索模式,如下所示:
cat …Run Code Online (Sandbox Code Playgroud)