小编Jon*_*erg的帖子

CMake add_custom_command没有运行

我正在尝试使用add_custom_command在构建期间生成文件.该命令似乎永远不会运行,所以我制作了这个测试文件.

cmake_minimum_required( VERSION 2.6 )

add_custom_command(
  OUTPUT hello.txt
  COMMAND touch hello.txt
  DEPENDS hello.txt
)
Run Code Online (Sandbox Code Playgroud)

我试过跑:

cmake .  
make
Run Code Online (Sandbox Code Playgroud)

并且没有生成hello.txt.我做错了什么?

cmake

48
推荐指数
3
解决办法
3万
查看次数

处理F#中的空值

我需要使用F#与一些C#代码互操作.Null是一个可能的值,因此我需要检查该值是否为null.文档建议使用模式匹配:

match value with
| null -> ...
| _ -> ...
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是原始代码是用C#编写的:

if ( value != null ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如何在F#中进行等效操作?模式匹配是否存在无操作?有没有办法用if语句检查null?

c# null f# interop

34
推荐指数
3
解决办法
2万
查看次数

exec()更改程序映像后malloc的内存会发生什么?

我知道当我exec()在Linux中调用其中一个系统调用时,它将使用新映像替换当前正在运行的进程.因此,当我分叉一个新进程并运行时exec(),子进程将被替换为新进程.

我从堆中分配的内存会发生什么变化?假设我想解析任意数量的命令并将其发送到exec().为了保持这个任意数字,我可能不得不在某个时刻分配内存,因为我认为我不能正确使用静态大小的数组,所以我可能会使用malloc()或等效的东西.

我需要保持这个内存分配,直到我打电话exec(),但exec()永远不会返回.

内存是否被操作系统回收?

c c++ memory-management exec

28
推荐指数
2
解决办法
7484
查看次数

CMake编译生成的文件

我有一个在CMake构建过程中生成的文件列表.我想在之后使用"add_library"编译这些文件,但我不知道哪些文件在生成之后才生成.反正有没有把它构建成CMake脚本?

cmake

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

寻找GtkWidget的孩子

我需要能够以编程方式探索GTK GUI的结构.我有GtkWidget,我想找到那个小部件的任何孩子.现在我知道GtkContainer有一个查找子项的功能,而GtkContainer是从GtkWidget派生的.

无论如何我可以检查一个小部件是否是一个GtkContainer,然后执行演员表?如果没有,有没有其他方式我可以发现GtkWidget是我的孩子?

gtk ui-automation

13
推荐指数
2
解决办法
9188
查看次数

Haskell懒惰评估和重用

我知道如果我要在Haskell中计算一个正方形列表,我可以这样做:

squares = [ x ** 2 | x <- [1 ..] ]
Run Code Online (Sandbox Code Playgroud)

然后我打电话给这样的广场:

print $ take 4 squares
Run Code Online (Sandbox Code Playgroud)

它会打印出[1.0,4.0,9.0,16.0].这被评估为[1**2,2**2,3**2,4**2].既然Haskell功能正常,每次结果都是相同的,如果我在其他地方再次调用square,它会重新评估它已经计算好的答案吗?如果我在调用前一行之后重新使用正方形,是否会重新计算前4个值?

print $ take 5 squares
Run Code Online (Sandbox Code Playgroud)

它会评估[1.0,4.0,9.0,16.0,5**2]吗?

haskell list-comprehension lazy-evaluation

11
推荐指数
2
解决办法
2097
查看次数

版本脚本和隐藏的可见性

使用gcc构建共享库时,可以使用限制符号的可见性-fvisibility=hidden.我还了解到,您可以使用version-script选项限制可见性ld.

现在我想知道是否可以将这些结合起来.假设我有一个包含以下内容的程序:

void foobar() {}
void say_hello() {}
Run Code Online (Sandbox Code Playgroud)

然后我有版本脚本文件:

{
  global:
    foobar;
}
Run Code Online (Sandbox Code Playgroud)

我编译它:

gcc -fvisibility=hidden -Wl,--version-script=<version-script> test.c -shared -o libtest.so
Run Code Online (Sandbox Code Playgroud)

当我nm之后运行时,我发现没有符号被导出.无论如何,我可以将默认可见性设置为隐藏,并使用版本脚本(或其他东西)导出符号?

gcc shared-libraries ld

9
推荐指数
1
解决办法
8737
查看次数

ReSharper"可能的NullReferenceException"错误的FileInfo?

我刚开始使用ReSharper,我试图找出它认为这段代码错误的原因.

var file = new FileInfo("foobar");
return file.Directory.FullName;
Run Code Online (Sandbox Code Playgroud)

它突出显示file.Directory为"可能的System.NullReferenceException".我不确定这是怎么可能的,因为文件对象永远不能为空,我无法弄清楚从DirectoryInfo对象返回的FileInfo对象如何永远为null.

.net c# resharper

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

Python print语句不带回车符

我正在尝试编写一个简单的工具,从光盘读取文件,进行一些图像处理,并返回算法的结果.由于该程序有时需要一段时间,我喜欢有一个进度条,所以我知道它在程序中的位置.由于我不喜欢混乱我的命令行而且我在Unix平台上,所以我想使用'\ r'字符仅在一行上打印进度条.

但是当我在这里有这个代码时,它什么都不打印.


# Files is a list with the filenames
for i, f in enumerate(files):
    print '\r%d / %d' % (i, len(files)),
    # Code that takes a long time
Run Code Online (Sandbox Code Playgroud)

我也尝试过:


print '\r', i, '/', len(files),
Run Code Online (Sandbox Code Playgroud)

现在只是为了确保这在python中有效,我尝试了这个:


heartbeat = 1
while True:
    print '\rHello, world', heartbeat,
    heartbeat += 1
Run Code Online (Sandbox Code Playgroud)

这段代码完美无缺.这是怎么回事?我对Linux上回车的理解是它只是将换行符移动到开头,然后我可以覆盖以前写过的旧文本,只要我不在任何地方打印换行符.但这似乎并没有发生.

此外,是否有更好的方法在命令行中显示进度条,而不是我当前尝试做的?

python command-line carriage-return

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

git-p4 克隆单个文件

我想使用git对特定文件进行一些临时管理。该目录结构中有许多我不想要的文件(并且 git 不能很好地处理),但我需要对这个文件使用其补丁管理功能。

我想使用 git-p4。是否可以克隆一个文件而不是整个目录结构?

git git-p4

6
推荐指数
1
解决办法
341
查看次数