参数-S -save-temps工作正常,只要我不在具有相同名称的文件上使用它们.
考虑以下情况:我有一个带有主目录的项目和一个带有名称的子目录,subDir并且在两个目录中都放置了带有名称的文件file.c.如果我现在gcc -S -save-temps file.cpp subDir/file.c只调用一个名称file.i将生成的中间文件.
正如man文件gcc告诉我的那样,这是预期的行为,当使用时,中间文件将始终放在当前路径中-save-temps.
我的问题是,我正在研究我事先不知道的项目.很可能,有人在他的Makefiles中构建了上面提到的例子.在那种情况下,我会被卡住,因为我需要两个中间文件.
对我正在构建的系统说几句话(为了更好地理解):我的工具用于make --just-print收集调用,项目的make文件调用.我扫描这些调用编译器调用并添加-save-temps和-S选项.目的是获取在编译项目过程中使用的每个预处理文件.
你有什么想法,即使上面提到的例子应该出现,我怎么能得到每个预处理的文件?
我正在尝试在任意C++或C项目中自动解析typedef .
因为某些typedef是在系统头文件中定义的(例如uint32),我现在正试图通过在我的代码文件上运行gcc预处理器然后扫描预处理文件中的typedef来实现这一点.然后我应该能够替换项目代码文件中的typedef.
我想知道,如果还有另一种,也许更简单的方法,我就会失踪.你能想到一个吗?
原因,我为什么要这样做:我正在使用不同的工具从C/C++项目中提取代码度量.指标是基于方法的.提取指标后,我必须合并由不同工具生成的数据.问题是,其中一个工具解析了typedef而其他工具则没有.如果有typedef用于方法的参数类型,我将度量标准映射到不同的方法名称,这些方法名称实际上是指源代码中的相同方法.
在源代码中考虑这个方法:int test(uint32 par1, int par2)
运行我的工具后,我有指标,映射到一个名为的方法int test(uint32 par1, int par2),我的一些指标被映射到int test(unsigned int par1, int par2).
有没有办法记录命令,调用编译程序?我知道参数-n和-p,但他们要么不解决if条件,只是打印出来.或者,当在Makefile中调用"make"时,它们不起作用.
较旧版本的gcc(例如4.0.2或4.1.2)可以选择-df(参见http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Debugging-Options.html#index-fdump_002drtl_002dcfg- 357).我用这个选项转储文件filename.c.134r.life2和filename.c.126r.life1,因为我想提取一些值,这些文件(例如,用于每个方法的寄存器计数)的.
问题是,在当前版本的gcc(例如4.2.2)中,此选项不再存在.还有其他选项,名称的树转储filename.c.135r.jump几乎相同.但是这个转储中的寄存器计数也丢失了,我找不到具有该值的转储.
还有一个参数,它给了我当前gcc版本中的旧转储吗?
我已经开始在JavaFX中开发一个应用程序而且我遇到了一个问题,我发现很少有用的信息:Linux中字符之间的间距非常不均匀.我不是在谈论不同角色的宽度,而是在谈论角色之间的空间.
它在普通文本中可见,但以下示例比普通文本更好地说明了效果.看看第一行.前两个字符之间的空间小于第二个和第三个字符之间的空格.这也发生在第六和第七个角色之间以及其他几个角色:
Swing没有这个问题,JavaFX在Windows中没有这个问题,或者在该操作系统上几乎看不到.它似乎也不是Mac上的主要问题.为了比较,这里是Mac Retina MacBook Pro的一个示例输出,2014年中,运行OS X 10.12.6和Java 9.0.4:
有谁知道这是否是JavaFX字体渲染引擎中的错误?如果是这样,有解决方法吗?
我真的开始怀疑我是否应该更改框架,因为在我看来这样糟糕的字体渲染是不可接受的.
关于这个问题还有另外一个问题但尚未得到解答: 为什么JavaFX在使用Text组件时在字母之间添加额外的间距以及如何修复它?
我已经能够在运行Manjaro的两台不同Linux机器上以及运行Debian的虚拟机中使用以下代码重现此问题:
package de.localtoast.fonttest;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class FontTest extends Application {
@Override
public void start(Stage primaryStage) {
VBox root = new VBox();
Label label1 = new Label("0000000000000000000000");
Label label2 = new Label("OOOOOOOOOOOOOOOOOOOOOO");
Label label3 = new Label("oooooooooooooooooooooo");
root.getChildren().add(label1);
root.getChildren().add(label2);
root.getChildren().add(label3);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Font Test");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args); …Run Code Online (Sandbox Code Playgroud)