簡體   English   中英

Scons:使用“對象”構建器構建頭文件

[英]Scons: build header file with Object builder

我的問題的簡短版本

我想使用Scons編譯.hpp文件,為此我使用以下目標:

env.Object('file.o', 'file.hpp')

使用此目標運行Scons會出現以下錯誤:

Don't know how to build from a source file with suffix `.hpp'.  Expected a suffix in this list: [...]

我能以某種方式告訴Scons它應該處理.hpp文件,因為它會處理.cpp文件嗎?

為什么我要這個

我將emacs與flymake( http://flymake.sourceforge.net/ )一起使用,它基本上在后台調用特定的make目標,解析輸出並在編輯器中突出顯示錯誤和警告。 但是,我想使用Scons作為構建系統而不是make。 要使用flymake,我有一個Makefile,其中包含一個只調用Scons的目標:

SCONS_TARGETS = $(CHK_SOURCES:=.syntax_target)

check-syntax:
    LANG=en scons mode=syntax $(SCONS_TARGETS)

在SContruct文件中,我有類似以下內容的語法檢查:

### checking syntax (for flymake)
if (mode == 'syntax'):
    env.Append(CCFLAGS = ['-fsyntax-only'])
    for target in COMMAND_LINE_TARGETS:
        env.Object(target,
                   target.replace('.syntax_target', ''))

這適用於我的源(.cpp)文件,但它不適用於標題(.hpp)文件,我得到上面提到的錯誤。

我已經提出了明顯的“解決方案”,只需將需要檢查的頭文件復制到帶有后綴.cpp的文件中,並對此文件進行語法檢查。 這種方法存在編譯器輸出新文件的錯誤的問題,因此flymake當然不會突出顯示實際發生的文件中的錯誤。

更新您的flymake部分如下:

### checking syntax (for flymake)
if (mode == 'syntax'):
    import SCons.Tool
    static_obj, shared_obj = SCons.Tool.createObjBuilders(env)

    static_obj.add_action('.hpp', SCons.Defaults.CXXAction)
    shared_obj.add_action('.hpp', SCons.Defaults.ShCXXAction)
    static_obj.add_emitter('.hpp', SCons.Defaults.StaticObjectEmitter)
    shared_obj.add_emitter('.hpp', SCons.Defaults.SharedObjectEmitter)

    env.Append(CCFLAGS = ['-fsyntax-only'])
    for target in COMMAND_LINE_TARGETS:
        env.Object(target,
                   target.replace('.syntax_target', ''))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM