Исключая некоторые файлы из Build in Scons

Поскольку я новичок в Scons, мне сложно перенести мой существующий Makefile на Scons.

Справочная информация: у меня есть 50 файлов в каталоге. Я хочу фильтровать файлы только с расширением *.cxx, это тоже имена файлов без строки "win32" .

Может кто-нибудь предложить реализацию этой логики в Scons:

Реализация Makefile:

WIN32FILTER = $(wildcard *win32*)
CXXOBJS = $(patsubst %.cxx,%.o,$(filter-out $(WIN32FILTER),$(wildcard *.cxx)))

В Scons я пытаюсь что-то вроде этого:

moduleSources = ''
for root, dirs, files in os.walk('./'):
    for filename in fnmatch.filter(files, '*.cxx'):
        if "win32" not in filename:
            moduleSources += ' ' + filename  

env.StaticLibrary( "support_host", moduleSources)

ЗдесьmoduleSources должен содержать список всех файлов *.cxx (исключая строку win32), которые будут использоваться для создания статической библиотеки.

Любая помощь приветствуется.

1 ответ

Вы создаете одну строку с пробелами в ней, чтобы описать набор файлов исходного кода. Это не делает то, что вы надеялись.

Вместо этого создайте список имен файлов. Следующий SConstruct делает то, что вы хотите:

import os
import fnmatch

env = Environment()

moduleSources = []
for root, dirs, files in os.walk('./'):
    for filename in fnmatch.filter(files, '*.cxx'):
        if "win32" not in filename:
            moduleSources.append(os.path.join(root, filename))

env.StaticLibrary( "support_host", moduleSources)
Другие вопросы по тегам