были созданы сканирования - как выполнить что-то/after/все цели,

Я только что создал плагин для клиента, позволив им записать код C# в модулях, которые действуют как VBA, делает для Office.

5
задан ajd. 10 December 2009 в 16:27
поделиться

3 ответа

In terms of dependencies, what you want is for all the test actions to depend on all the program-built actions. A way of doing this is to create and export a dummy-target to all the subdirectories' sconscript files, and in the sconscript files, make the dummy-target Depends on the main targets, and have the test targets Depends on the dummy-target.

I'm having a bit of trouble figuring out how to set up the dummy target, but this basically works:

(in top-level SConstruct)

dummy = env.Command('.all_built', 'SConstruct', 'echo Targets built. > $TARGET')
Export('dummy')

(in each sub-directory's SConscript)

Import('dummy')
for target in target_list:
  Depends(dummy, targe)
for test in test_list:
  Depends(test, dummy)

I'm sure further refinements are possible, but maybe this'll get you started.

EDIT: also worth pointing out this page on the subject.

0
ответ дан 14 December 2019 в 08:52
поделиться

SCons, как и Make, использует декларативный метод для решения проблемы сборки. Вы не хотите указывать SCons, как делать свою работу. Вы хотите задокументировать все зависимости, а затем позволить SCons решать, как он все строит.

Если что-то выполняется раньше, чем что-то еще, вам нужно создать и подключить зависимости.

Если вы хотите создать dmy touch-файлы. , вы можете создать собственный конструктор, например:

import time

def action(target, source, env):
    os.system('echo here I am running other build')
    dmy_fh = open('dmy_file','w')
    dmy_fh.write( 'Dummy dependency file created at %4d.%02d.%02d %02dh%02dm%02ds\n'%time.localtime()[0:6])
    dmy_fh.close()

bldr = Builder(action=action)
env.Append( BUILDERS = {'SubBuild' : bldr } )

env.SubBuild(srcs,tgts)

Очень важно поместить метку времени в фиктивный файл, потому что scons использует хэши md5. Если у вас пустой файл, md5 всегда будет таким же, и он может решить не выполнять последующие шаги сборки. Если вам нужно создать различные настройки для базовой команды, вы можете использовать фабрики функций для изменения шаблона. например,

def gen_a_echo_cmd_func(echo_str):
    def cmd_func(target,source,env):
        cmd = 'echo %s'%echo_str
        print cmd
        os.system(cmd)
    return cmd_fun

bldr = Builder(action = gen_a_echo_cmd_func('hi'))
env.Append(BUILDERS = {'Hi': bldr})
env.Hi(srcs,tgts)

bldr = Builder(action = gen_a_echo_cmd_func('bye'))
env.Append(BUILDERS = {'Bye': bldr})
env.Bye(srcs,tgts)

Если у вас есть что-то, что вы хотите автоматически добавить в поток сборки scons (например, г. что-то, что сжимает все ваши файлы журнала сборки после того, как все остальное запущено), см. мой вопрос здесь .

5
ответ дан 14 December 2019 в 08:52
поделиться

Как только в проект будет добавлен файл RESX ресурса, Visual Studio создаст Designer.cs с тем же именем, создав для вас класс со всеми предметами ресурса в качестве статических свойств. Все имена ресурса можно увидеть при вводе точки в редакторе после ввода имени файла ресурса.

Кроме того, можно использовать отражение для циклического перехода через эти имена.

Type resourceType = Type.GetType("AssemblyName.Resource1");
PropertyInfo[] resourceProps = resourceType.GetProperties(
    BindingFlags.NonPublic | 
    BindingFlags.Static | 
    BindingFlags.GetProperty);

foreach (PropertyInfo info in resourceProps)
{
    string name = info.Name;
    object value = info.GetValue(null, null);  // object can be an image, a string whatever
    // do something with name and value
}

Очевидно, что этот метод можно использовать только в том случае, если файл RESX находится в области текущей сборки или проекта. В противном случае используйте метод, предоставляемый «импульсом».

Преимуществом этого метода является то, что вы вызываете фактические свойства, которые были предоставлены вам, с учетом любой локализации, если вы хотите. Однако он довольно избыточен, так как обычно следует использовать безопасный метод прямого вызова свойств ресурсов.

-121--2034719-

это не работает оба способа, родитель может построить потомка с помощью метода build_association, но не наоборот.

читать: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_one

-121--3320752-

Решение должно быть таким простым, как это.

Сделать результат тестирования строителей зависит от результата установки построителя

В псевдо:

test = Test(dlls)
result = Install(dlls)
Depends(test,result)

Лучший способ был бы, если бы Test builder фактически отработал dll зависимости для вас, но могут быть все виды причин, он не делает этого.

2
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: