小编Ria*_*son的帖子

当我调用git时,cmake execute_process()总是以"没有这样的文件或目录"失败

在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中.

我在这里缺少什么想法?

cmake

25
推荐指数
1
解决办法
2万
查看次数

使用C/C++,如何以彩色打印到stdout,但只有终端支持它?

我有一个记录事情的程序STDOUT.

这些日志条目具有关联的"日志级别"(调试,警告,信息等),我想让用户能够为此输出着色,具体取决于日志级别.

确定是否STDOUT附加到具有彩色功能的终端的方法是什么?那我怎么能用颜色输出我的文字呢?

我正在寻找一个只涉及C或C++调用的解决方案.我猜curses(或ncurses)有一些东西可以缓解这一点,但我想避免使用它来保持我的依赖关系最小化.

c c++ linux colors

23
推荐指数
1
解决办法
8610
查看次数

内核模块在Android设备上找不到固件文件; 应该在哪里?

我无法在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)

没有这样的运气......什么决定固件应该在哪里,以及如何确定它正在扫描固件的目录?

android firmware linux-device-driver linux-kernel

5
推荐指数
2
解决办法
1万
查看次数

'docker -v'绑定挂载在Windows 10上不再起作用

当我第一次在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)

docker docker-for-windows

4
推荐指数
1
解决办法
2590
查看次数

用std :: set替代BOOST_FOREACH?

当你想迭代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必须允许它所引用的值的变异.

我可以想到一些火腿方法,但我想知道是否有更简洁的方法来迭代集合.

c++ boost stl

3
推荐指数
1
解决办法
3069
查看次数

使用一个awk命令在匹配的字符串中搜索字符串

我想使用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)

awk

3
推荐指数
1
解决办法
3719
查看次数