我正在研究一個C++項目,它有一些手工編碼的源文件,以及一些由命令行工具生成的源文件和頭文件。 生成的實際源文件和頭文件由工具讀取的JSON文件的內容決定,因此無法硬編碼到scons腳本中。 我想設置scons,這樣如果我清理項目,然後創建它,它會知道運行命令行工具來生成生成的源文件和頭文件作爲第一步,然後編譯我的手編碼的文件和生成的源文件並將它們鏈接起來以製作二進制文件。 這可能嗎?我不知道如何實現這一點,所以任何幫助將不勝感激。如何設置scons來構建生成源文件的項目?
0
A
回答
1
是的,這是可能的。根據您使用哪種工具創建標題/源文件,您需要查看我們的工具索引https://bitbucket.org/scons/scons/wiki/ToolsIndex,或閱讀我們的指南https://bitbucket.org/scons/scons/wiki/ToolsForFools來編寫您自己的Builder。 根據您的描述,您可能必須編寫自己的Emitter,它分析JSON輸入文件並返回最終由調用產生的文件名。然後,所有你需要做的是:
# creates foo.h/cpp and bar.h/cpp
env.YourBuilder('input.json')
env.Program(Glob('*.cpp'))
的Glob
會發現創建的文件,即使他們沒有物理硬盤驅動器上還存在,並將它們添加到整體的依賴關係。 如果您還有其他問題或疑問,請考慮在[email protected]上訂閱我們的用戶郵件列表(另請參閱http://scons.org/lists.html)。
0
0
感謝德克Baechle我得到了這個工作 - 對於這裏感興趣的任何人是我使用的代碼。
import subprocess
env = Environment(MSVC_USE_SCRIPT = "c:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\VC\\bin\\vcvars32.bat")
def modify_targets(target, source, env):
#Call the code generator to generate the list of file names that will be generated.
subprocess.call(["d:/nk/temp/sconstest/codegenerator/CodeGenerator.exe", "-filelist"])
#Read the file name list and add a target for each file.
with open("GeneratedFileList.txt") as f:
content = f.readlines()
content = [x.strip('\n') for x in content]
for newTarget in content:
target.append(newTarget)
return target, source
bld = Builder(action = 'd:/nk/temp/sconstest/codegenerator/CodeGenerator.exe', emitter = modify_targets)
env.Append(BUILDERS = {'GenerateCode' : bld})
env.GenerateCode('input.txt')
# Main.exe depends on all the CPP files in the folder. Note that this
# will include the generated files, even though they may not currently
# exist in the folder.
env.Program('main.exe', Glob('*.cpp'))
相關問題
- 1. SCons:調用Makefile項目的構建
- 2. 如何設置發佈的項目和目標構建設置?
- 3. 避免在目標/生成源的循環中構建項目
- 4. 如何設置QNX項目來生成調試可執行文件?
- 5. 項目文件構建成功,但源文件構建失敗c#
- 6. 用scons構建源代碼?
- 7. 如何構建scons MSVSProject構建器函數的文件列表?
- 8. 可憐的人來源控制壓縮項目文件構建
- 9. 如何配置maven安裝插件來更改項目構建文件位置
- 10. 如何構建Maven3項目以在另一個項目中生成輸入以生成源代碼?
- 11. 設置Xcode項目的構建目錄
- 12. 在構建器項目中使用生成的源代碼
- 13. 如何生成scons中的變種目錄中的目標文件
- 14. SCons:如何在構建一些目標後生成依賴關係?
- 15. 如何使用Eclipse CDT構建SCons項目?
- 16. 如何在SCons中構建項目時指定java標誌?
- 17. SCons生成文件的組屬性
- 18. 如何忽略android項目設置中的資源xml文件
- 19. Xcode - 如何在不生成.app文件的情況下構建Mac項目
- 20. 如何禁用項目的自動生成的配置文件?
- 21. 如何添加依賴項目的生成源以構建路徑?
- 22. C#項目構建好,但沒有生成二進制文件
- 23. 在eclipse中爲項目生成Ant構建文件
- 24. maven - spring項目構建配置文件
- 25. Xcode中的項目構建設置中的目標構建設置
- 26. 我如何設置接口生成器的視圖來源
- 27. 如何在多項目構建中「seq」插件設置
- 28. 如何從一個生成文件構建多個目標
- 29. 如何構建openssl來生成dylib
- 30. 如何在構建結束時從Visual Studio項目生成Qt .pri文件?
這是我自己的定製工具,可以生成源文件。我可以修改它以輸出將要生成的文件列表。你是說我應該爲YourBuilder創建一個Emitter,它調用我的工具來返回輸出文件的列表,然後你的例子將正常工作? –