Scons положительно отказывается встраивать в вариант_dir - PullRequest
0 голосов
/ 01 апреля 2020

Я портировал проект, который использовал Make на SCons. Вообще, я доволен тем, насколько легко использовать SCons относительно относительно создания. Однако есть одна вещь, которая сопротивлялась нескольким часам попыток. Файлы в моих проектах содержатся в дереве, которое начинается в ProjectHome. Источники находятся в нескольких подкаталогах, содержащихся в ProjectHome / src /

У меня есть файл SConstruct в ProjectHome, который определяет среду сборки и затем вызывает SConscript (в ProjectHome), который создает объектные файлы, которые затем помещаются в библиотека в ProjectHome / lib от SConstruct. Все работает нормально, за исключением того, что я хотел бы отделить, где хранятся файлы .o, от исходных файлов. Итак, вот что у меня есть

#SConstruct.py
...
# The environment is defined above, no issues 
cppobj, chfobj=SConscript('./SConscript.py', 'env', variant_dir='build', src_dir='.', duplicate=False)
env.Install('lib/'+str(Dim)+'D', env.SharedLibrary(target='Grade'+str(n), source=cppobj+chfobj))

, и это для SConscript.py

#SConscript.py
import platform
import os
import sys

def getSubdirs(abs_path_dir) :
    """ returns a sorted list with the subdirectoris in abs_path_dir"""  
    lst=[x[0] for x in os.walk(abs_path_dir)]
    lst.sort()
    return lst
Dirs=getSubdirs(os.getcwd()+'/src') # gives me list of the directories in src

CppNodes=[]
ChFNodes=[]

Import('env')

for directory in Dirs[2:3]:

    CppNodes+=Glob(directory+'/*.cpp')
    ChFNodes+=Glob(directory+'/*.ChF')



# env.Object can work on lists
ChFobj=env.SharedObject(ChFNodes)
# This builder likes to work one at a time 
# this build an internal representation of _F.H headers 
# so that when an #include in encountered, scons look
# at this list too, and not just what specified by the IncDirs
if len(ChFNodes)==1: # this is ridiculous but having only one ChF file causes troubles
    os.system('touch dummyF.ChF')
    ChFNodes.append('dummyF.ChF')
ChFHeader=[]
for file in ChFNodes:
    ChFHeader+=env._H(source=file) 

Cppobj=env.SharedObject(CppNodes)



Return('Cppobj ChFobj')

Однако, на мой взгляд, сборка полностью игнорируется. Я пробовал разные комбинации, даже помещая SConscript.py в каталог сборки, cally SConscript ('build / SCoscript.py', 'env', ...), как вы его называете: Scons упрямо отказывается что-либо делать со сборкой. Любая помощь приветствуется. Чтобы было ясно, это работает в создании библиотек. Просто он помещает промежуточные объектные файлы в каталог sr c.

...