标签: os-agnostic

操作系统检测makefile

我经常在几台不同的计算机和几种不同的操作系统上工作,这些操作系统是Mac OS X,Linux或Solaris.对于我正在进行的项目,我从远程git存储库中提取代码.

无论我在哪个终端,我都希望能够处理我的项目.到目前为止,我已经找到了通过每次切换计算机时更改makefile来绕过操作系统更改的方法.然而,这是乏味的,并引起一堆头痛.

如何修改我的makefile,以便它检测我正在使用哪个操作系统并相应地修改语法?

这是makefile:

cc = gcc -g
CC = g++ -g
yacc=$(YACC)
lex=$(FLEX)

all: assembler

assembler: y.tab.o lex.yy.o
        $(CC) -o assembler y.tab.o lex.yy.o -ll -l y

assembler.o: assembler.c
        $(cc) -o assembler.o assembler.c

y.tab.o: assem.y
        $(yacc) -d assem.y
        $(CC) -c y.tab.c

lex.yy.o: assem.l
        $(lex) assem.l
        $(cc) -c lex.yy.c

clean:
        rm -f lex.yy.c y.tab.c y.tab.h assembler *.o *.tmp *.debug *.acts
Run Code Online (Sandbox Code Playgroud)

makefile os-agnostic os-detection

237
推荐指数
10
解决办法
15万
查看次数

命令行批量图像裁剪工具

是否有任何轻量级命令行批量图像裁剪工具(Linux或Windows)可以处理各种格式?

image-manipulation image crop os-agnostic

41
推荐指数
5
解决办法
6万
查看次数

判断 make 是在 windows 还是 linux 上运行

有没有办法在 makefile 中知道 GNU make 是在 linux 操作系统还是 windows 操作系统上运行?

我已经构建了一个 bash 脚本,它生成一个用于构建我的应用程序的 makefile,它在我的 Debian 机器上运行良好。我想尝试在 MinGW/MSYS 上构建它,但问题是我必须构建和运行一些测试程序来检查源代码中的错误,而要在 Windows 上运行它,我必须添加 .exe 后缀。

makefile gnu-make os-agnostic os-detection

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

创建在执行之间持续存在的内存缓存

我正在开发一个Python命令行实用程序,可能涉及对一组文件的相当大的查询.这是一个相当有限的查询列表(想想索引的数据库列)为了提高进程中的性能,我可以生成一次排序/结构化列表,映射和,并重复点击它们,而不是每次都打到文件系统.

但是,这些缓存在进程结束时会丢失,并且每次运行脚本时都需要重建,这会大大增加程序的运行时间.我想确定在我的命令的多次执行之间共享此数据的最佳方法,这可能是并发的,一个接一个,或者执行之间有明显的延迟.

要求:

  • 必须快速 - 应尽量减少任何类型的执行处理,包括磁盘IO和对象构造.
  • 必须与操作系统无关(或者至少能够在Unix/Windows上挂钩类似的底层行为,这更有可能).
  • 必须允许相当复杂的查询/过滤 - 我认为键/值映射不够好
  • 难道不是必须跟上时代的- (简述)陈旧的数据是完全正常的,这只是一个缓存,实际的数据被分别写入磁盘.
  • 不能使用重量级守护进程,如MySQL或MemCached - 我希望最小化安装成本,并要求每个用户安装这些服务太多了.

喜好:

  • 如果可能的话,我想完全避免任何长期运行的守护进程.
  • 虽然我希望能够快速更新缓存,但在更新时重建整个缓存并不是世界末日,快速读取比快速写入更重要.

在我理想的幻想世界中,我能够直接在执行之间保留Python对象,有点像Java线程(如Tomcat请求)共享单例数据存储对象,但我意识到这可能是不可能的.我越接近,越好.

候选人:

  • SQLite在内存中

    SQLite本身对我的用例来说似乎不够快,因为它是由磁盘支持的,因此必须在每次执行时从文件中读取.也许这并不像看起来那么糟糕,但似乎有必要将数据库持久存储在内存中.SQLite允许DB 使用内存作为存储,但这些DB在程序退出时被销毁,并且不能在实例之间共享.

  • 使用mmap将平面文件数据库加载到内存中

    在光谱的另一端,我可以将缓存写入磁盘,然后使用mmap将它们加载到内存中,可以在不同的执行之间共享相同的内存空间.如果所有进程都退出,我不清楚mmap会发生什么.如果mmap最终从内存刷新是没关系的,但我希望它能保持一点点(30秒?几分钟?),这样用户可以一个接一个地运行命令,并且可以重用缓存. 这个例子似乎意味着需要一个开放的mmap句柄,但我还没有找到任何关于何时从内存中删除内存映射文件并需要从磁盘重新加载的确切描述.

    我想我可以实现这个,如果mmap对象在退出后确实存在,但感觉非常低级,我想有人已经实现了更优雅的解决方案.我不想开始构建这个只是为了意识到我一直在重建SQLite.另一方面,感觉它会非常快,我可以根据具体的用例进行优化.

  • 使用Processing在进程之间共享Python对象

    处理包指示" 可以使用...共享内存在进程之间共享对象 ".通过其他文档,我没有看到任何进一步提及这种行为,但这听起来很有希望.谁能指导我了解更多信息?

  • 将数据存储在RAM磁盘上

    我关注的是特定于操作系统的功能,但我可以创建一个RAM磁盘,然后根据需要简单地读/写(SQLite?).该fs.memoryfs包似乎是一个有前途的替代使用多个操作系统的工作,但评论意味着相当数量的限制.

我知道pickle是存储Python对象的有效方式,因此它可能比任何类型的手动数据存储都具有速度优势.我可以将泡菜挂入以上任何选项吗?这会比平面文件还是SQLite更好?

我知道有很多与此相关的问题,但我做了一些挖掘工作,找不到任何关于多个命令行执行的直接解决我的问题.

我完全承认,我可能会过分思考这一点.我只想尝试一下我的选择,如果他们是值得的.

非常感谢你的帮助!

python command-line caching os-agnostic

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

如何增加 Rust 库可用的堆栈大小?

我正在使用 lambda 演算,并且希望有更多的堆栈空间,以便能够构建和计算(非常)长的函数链。有没有办法增加板条箱的它,类似于增加递归限制(#![recursion_limit = "100"])?

该板条箱是一个库,我希望它能够执行堆栈密集型操作,无论目标操作系统如何。

stack os-agnostic rust

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

如何访问当前平台的文件路径分隔符?

是否有任何可用选项在Rust中获取特定于平台的文件分隔符?

可以有不同的平台特定分隔符:

let separator = "\\" // Could be this.
let separator2 = "/" // Could be this.
let separator3 = "//" // Could be this.
Run Code Online (Sandbox Code Playgroud)

我看起来像是以下内容:

let env_independent_seperator = env::separator()
Run Code Online (Sandbox Code Playgroud)

那么可能是以下用法:

let folder = "C\\Folder\\Path";
let env_independent_separator = env::separator() // Looking something like this
let file_name = "File.txt";
let full_path = folder+ env_independent_separator + file_name;
Run Code Online (Sandbox Code Playgroud)

File::separator()Rust里有没有?

filesystems os-agnostic separator rust

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