2014-03-13 65 views
1
獲取GCC選項

我正在開發一個Eclipse插件,其中包括其他必須檢查當前C項目中設置的編譯器選項。 基本上,我想訪問屬性 - > C/C++編譯 - >設置 - > GCC C編譯器 - >所有選項字段。Eclipse CDT從代碼

我已經搜索瞭如何訪問它,但我還沒有找到辦法做到這一點。 我試圖通過喜好來存取權限它像下面的代碼:

IEclipsePreferences root = Platform.getPreferencesService().getRootNode(); 

我可以使用插件的喜好這種方式,但不與C項目。

有沒有人知道一種方法來做到這一點?我不需要更改編譯器選項,只需知道設置了哪些標誌。

更新:我找到了解決方案。

IResourceInfo info = getResourceInfo(translationUnit, description); 
    ITool tools[] = info.getTools(); 
     for (ITool t : tools) { 
      if (t.getName().compareToIgnoreCase("GCC C Compiler") == 0) { 
       try { 
        //Finally the field I was looking for 
        String commandLine = t.getToolCommandFlagsString(getProject().getFullPath(), null); 

       } catch (BuildException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

我然後可以解析字符串,不理想,但它的工作原理。 我得到了這個職位的getResourceInfo()函數:How do I programmatically change the Eclipse CDT tool settings for a file?

所以,感謝justinmreina的答案!

回答

2

你穿越黑暗和孤獨的道路,我的朋友:)。但儘管如此,卻是一件有趣的事情。在自定義工具鏈/工具

這裏

設置選項是如果有人試圖以編程方式設置GNU工具/工具鏈的選項的示例:

*和這是同一作者的背景線索解決它:

他做了什麼,這裏將讓你到你的決心。我建議首先瀏覽org.eclipse.cdt.managedbuild.gnu.ui的plugin.xml。關注工具鏈,工具及其選項。

尋找GNU C工具鏈(S)的選項/工具(S)

而且,這裏是一個有用的帖子我忍了一段時間回來就「發現在GNU C項目宕選項」 。不是確切的OP的問題,但答案與您的問題有關。

結論

我強烈懷疑你會找到答案< 10行代碼,甚至設置 '-v' 標誌的編譯器...如果你確實找到了一個簡單的結果,我建議在這裏發佈它作爲後續。

祝你好運!

編輯:我一直在啃這一段時間,因爲我最近偶然發現了它/失敗了。以下是如何從代碼設置選項。

//assumptions 
//#1 project is [0] in workspace 
//#2 compiler is [2] in workspace 

//get project 
IProject proj = ResourcesPlugin.getWorkspace().getRoot().getProject("hello_world"); 

//get <storageModule moduleId="org.eclipse.cdt.core.settings"> 
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(proj); 

//get <storageModule moduleId="cdtBuildSystem"> 
IManagedProject sub_info = info.getManagedProject(); 

//get <configuration name="Debug"> 
IConfiguration config = sub_info.getConfigurations()[0]; 

//get <toolChain> 
IToolChain toolchain = config.getToolChain(); 

//get <tool name="GCC C Compiler"> 
ITool tool = toolchain.getTools()[2]; 

//get <option> 
IOption option = tool.getOptionBySuperClassId("gnu.c.compiler.option.misc.other"); 

//----append new flag----// 
String new_opt_value = option.getValue() + " -mySuperFlag"; 

//-----store it----// 
ManagedBuildManager.setOption(config, tool, option, new_opt_value); 
ManagedBuildManager.saveBuildInfo(proj, true); 

注意 - 一旦你開始觀察這個操作,作爲「日蝕資源」,該方法爲(有點...)明確 - 每個對象調用到訪問場只是訪問另一個部分在.cproject資源的XML模式內

希望這有助於!

+0

大聲笑,這正是10行代碼... –