0

我正在研究 eclipse cdt 插件开发使用gnuarmeclipse

上一个问题。

我需要在项目资源管理器中设置或替换文件(如链接脚本)。

我知道它会更改项目属性-> C/C++ 构建-> 设置-> 工具设置-> GCC C 链接器-> 常规-> 脚本文件(-T)。

但我想要,它在项目资源管理器上下文菜单上执行。

见下文。

1) 在 Project Explorer 中选择 LD(仅一个链接脚本文件的文件夹)。

2) 右键单击​​并在上下文菜单中选择“设置链接器脚本文件”。

3) 在打开窗口中选择要设置或替换的文件。

这是 setlinkerscript.java

public class setlinkerscript extends AbstractHandler {

public Object execute(ExecutionEvent event) throws ExecutionException {
    // TODO Auto-generated method stub

    IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);

    Shell shell = new Shell();
    FileDialog dialog = new FileDialog(shell, SWT.OPEN);
    dialog.setFilterExtensions(new String[] {"*.x"});
    String linkerscript = dialog.open();
    System.out.println(linkerscript);

    return null;
}}

我有一个文件位置,但我不知道我在 Eclipse 上设置的位置。

有任何 API 或方法吗?或推荐文件。

我不能为图附加 jpg .. 需要更多的声誉点。对不起!

提前致谢。

4

1 回答 1

0

哦,最后,我自己做了。这是我的回答。

感谢stackoverflow和谷歌。

但是..另一个问题来了...ㅜㅜ

public class setlinkerscript extends AbstractHandler {

    public Object execute(ExecutionEvent event) throws ExecutionException {
        // TODO Auto-generated method stub

        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);

        Shell shell = new Shell();
        FileDialog dialog = new FileDialog(shell, SWT.OPEN);
        dialog.setFilterExtensions(new String[] {"*.x"});       
        String linkerscript = dialog.open();    // get new linkerscript with path       

        IEditorPart  editorPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
        String activeProjectName = null;

        if(editorPart  != null)
        {
            IFileEditorInput input = (FileEditorInput)editorPart.getEditorInput();
            IFile file = input.getFile();
            IProject activeProject = file.getProject();
            activeProjectName = activeProject.getName();
        }

        // ===========================================================================================================
        // CProject

        ICProject cproject = CoreModel.getDefault().getCModel().getCProject(activeProjectName);
        IManagedBuildInfo buildInfo = ManagedBuildManager.getBuildInfo(cproject.getResource());

        // ===========================================================================================================
        // config

        IConfiguration configs[] = buildInfo.getManagedProject().getConfigurations();

        int i;
        for(i=0; i<2; i++)
        {
            // configs[0] : Debug
            ITool[] tool = configs[i].getTools();

            // configs[1] : Release

            // ===========================================================================================================
            // tool
            //  GCC Assembler,  GCC C Compiler, GCC C++ Compiler,       GCC C Linker,
            //  GCC C++ Linker, GCC Archiver,   Windows Create Flash Image, Windows Create Listing,
            //  Windows Print Size

            // tool[3] : EISC GCC C Linker
            IOption[] option = tool[3].getOptions();

            // option[0] : linkerscript
            Object value = option[0].getValue();

            try {
                option[0].setValue(linkerscript);
            } catch (BuildException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        // ===========================================================================================================

        return null;
    }
}
于 2014-07-04T08:42:48.483 回答