小编Bob*_*Bob的帖子

gnu make“删除中间文件”

我有以下规则

define compile_c
$(ECHO) "CC $<"
$(Q)$(CC) $(CFLAGS) -c -MD -o $@ $<
@# The following fixes the dependency file.
@# See http://make.paulandlesley.org/autodep.html for details.
@# Regex adjusted from the above to play better with Windows paths, etc.
@$(CP) $(@:.o=.d) $(@:.o=.P); \
  $(SED) -e 's/#.*//' -e 's/^.*:  *//' -e 's/ *\\$$//' \
      -e '/^$$/ d' -e 's/$$/ :/' < $(@:.o=.d) >> $(@:.o=.P); \
  $(RM) -f $(@:.o=.d)
endef

vpath %.c . $(TOP)
$(BUILD)/%.o: %.c $(BUILD)/%.pp
    $(call compile_c)

vpath %.c . $(TOP) …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

14
推荐指数
3
解决办法
6319
查看次数

python - 如何实现一个C函数作为等待(协同程序)

环境:C和micropython虚拟机中的协作RTOS是其中的任务之一.

为了使虚拟机不会阻止其它RTOS的任务,我插入RTOS_sleep()vm.c:DISPATCH(),这样,每次执行字节码后,虚拟机放弃控制到下一个RTOS任务.

我创建了一个uPy接口,使用生产者 - 消费者设计模式从物理数据总线异步获取数据 - 可以是CAN,SPI,以太网.

在uPy中的用法:

can_q = CANbus.queue()
message = can_q.get()
Run Code Online (Sandbox Code Playgroud)

C中的实现can_q.get()不会阻止RTOS:它轮询C队列,如果没有收到消息,它会调用RTOS_sleep()给另一个任务填充队列的机会.事物是同步的,因为C队列仅由另一个RTOS任务更新,而RTOS任务仅在RTOS_sleep()被调用时切换,即协作

C实现基本上是:

// gives chance for c-queue to be filled by other RTOS task
while(c_queue_empty() == true) RTOS_sleep(); 
return c_queue_get_message();
Run Code Online (Sandbox Code Playgroud)

尽管Python语句can_q.get()不会阻止RTOS,但它会阻止uPy脚本.我想重写它,所以我可以使用async defie coroutine并让它不阻止uPy脚本.

不确定语法,但这样的事情:

can_q = CANbus.queue()
message = await can_q.get()
Run Code Online (Sandbox Code Playgroud)

如何编写C函数以便我可以await使用它?

我更喜欢CPython和micropython的答案,但我会接受仅限CPython的答案.

c python coroutine async-await micropython

14
推荐指数
1
解决办法
1450
查看次数

Github - 什么是红X,针对分支的绿色复选标记

什么是绿色复选标记/红色 X?

是建还是不建?

截屏

github

10
推荐指数
1
解决办法
9253
查看次数


grep - 如何输出进度条或状态

有时候我是grep成千上万的文件,看到某种进展(条形或状态)会很高兴.

我知道这不是一件容易的事,因为grep将搜索结果输出STDOUT,我的默认工作流是我将结果输出到文件,并希望将进度条/状态输出到STDOUTSTDERR.

这需要修改源代码grep吗?

理想的命令是:

grep -e "STRING" --results="FILE.txt"

和进展:

[curr file being searched], number x/total number of files
Run Code Online (Sandbox Code Playgroud)

写入STDOUTSTDERR

bash grep

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

gcc - 如何创建目标文件的mapfile

我有一个.map名为的文件a.out.map是从.cpp/ .obj文件创建但我不记得如何.我已经包含了一个片段:

.plt            0x0000380c      0x848
 *(.plt)
 .plt           0x0000380c      0x848 C:/QNX650/target/qnx6/armle-v7/lib/crti.o

.text           0x00004054     0x5448
                0x00004054                _btext = .
 *(.text .stub .text.* .gnu.linkonce.t.*)
 .text          0x00004054        0x0 C:/QNX650/target/qnx6/armle-v7/lib/crti.o
 .text          0x00004054       0xf4 C:/QNX650/host/win32/x86/usr/lib/gcc/arm-unknown-nto-qnx6.5.0eabi/4.4.2/pic//crtbegin.o
 .text          0x00004148     0x1b3c C:\Temp\2qccTulUdb\eventlookupmodel.o
                0x00004b80                AL2HMIBridge::EventLookupModel::data(QModelIndex const&, int) const
                0x000054f8                AL2HMIBridge::EventLookupModel::rowCount(QModelIndex const&) const
                0x000046a8                AL2HMIBridge::EventLookupModel::getNameFromId(unsigned int, unsigned int)
                0x00004148                AL2HMIBridge::EventLookupModel::EventLookupModel(AL2HMIBridge::CsvImporter&, QObject*)
                0x00004738                AL2HMIBridge::EventLookupModel::getElementFromId(unsigned int, unsigned int)
                0x00004ab4                AL2HMIBridge::EventLookupModel::getElementFromName(QString const&)
                0x00005548                AL2HMIBridge::EventLookupModel::appendElement(AL2HMIBridge::EventLookupModel::EventElement const&)
                0x00005804                AL2HMIBridge::EventLookupModel::appendElement(QString const&, unsigned int, unsigned int, QList<
Run Code Online (Sandbox Code Playgroud)

什么是生成.map文件的gcc命令?

c++ gcc qnx

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

google mock - 怎么说“必须使用某个参数调用一次函数,但可以使用不同的参数调用多次”?

我需要检测给定的函数是否已使用一组特定的参数被精确调用一次。

EXPECT_CALL(Mock_Obj, func("abc")).Times(1)

但是可以使用不同的参数多次调用该函数。

我该如何表达?

c++ unit-testing googletest googlemock gmock

8
推荐指数
1
解决办法
3362
查看次数

github - 如何在特定文件夹中搜索文本

在 Github 中,我使用左上角的搜索窗口在存储库中进行搜索。

我知道最好的方法是下载代码并搜索,但有时我无法这样做。

问题

如何将搜索限制在特定文件夹内?

github

8
推荐指数
1
解决办法
3752
查看次数

GNU make 3.81 - 怎么做'--output-sync = target'

最新版本make有一个选项--output-sync,可以使每个目标的STDOUT成为原子,以便在使用时不会交错多个目标的语句make --jobs=N

不幸的是,我必须使用,make v 3.81因为这是我们的SDK附带的那个.

为了确定我是否需要--output-sync,我在目标周围添加了一些"保护声明"

all: $(patsubst %.cpp, %.o, $(wildcard *.cpp))


%.o: %.cpp  
    @echo BEFORE
    @echo MAKEFLAGS=$(MAKEFLAGS)
    qcc.exe $(CC_FLAGS) $@ $< 
    @echo AFTER
Run Code Online (Sandbox Code Playgroud)

输出非常交错.

AFTER
BEFOREAFTER
AFTER
AFTER
Run Code Online (Sandbox Code Playgroud)

有没有办法模拟--output-sync功能?

据我所知,如果有一种方法可以"锁定STDOUT mutex"预配方并在配方后释放它,那么构建速度可能会受到影响.

我很好修改我们的每个目标,如果这是它需要的.

c++ makefile gnu-make

7
推荐指数
1
解决办法
720
查看次数

C++ 运算符 () 括号 - 运算符 Type() 与 Type 运算符()

如果有的话有什么区别?

例如:int operator()operator int()

我正在寻找“官方”C++ 文档的答案。

c++

7
推荐指数
1
解决办法
9631
查看次数