[英]SCons out of source build only works for executable program, not for object files
[英]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.