scons генерирует неверную директиву include в build - PullRequest
2 голосов
/ 31 октября 2011

У меня есть сборка scons с использованием простой, общей установки каталогов:

project/
    SConstruct
    src/
        file.cpp
        SConscript
    include/
        namespace/
            header.h

В file.cpp я включаю header.h через #include "namespace / header.h", поэтому я просто хочу добавить каталог include в список путей включения. С точки зрения источника (и SConscript) этот путь - "../include", но у команды build всегда есть неверный путь для включения в него. Я попробовал следующее в SConscript:

env.Append(CPPPATH = ["#include"])
env.Append(CPPPATH = [Dir("include")])
env.Append(CPPPATH = [os.getcwd() + os.sep + ".." + os.sep + "include"])
env.Append(CPPPATH = ["../include"])
env.Append(CPPPATH = ["#../include"])

ни один из которых, кажется, не работает. Первые четыре дают "-Iinclude", в то время как последние помещают include на уровень каталога над проектом! Вот полный SConscript

env = Environment()
import os

target_name = "device"

source_files = Split("""
file.cpp
""")

env.Append(CPPPATH = ["#include", os.environ.get("SYSTEMC_PATH"),
    os.environ.get("SYSTEMC_TLM_PATH"), os.environ.get("BOOST_PATH")])

object_list = env.SharedObject(source = source_files)
targetobj = env.SharedLibrary(target = target_name, source = object_list )
Default(targetobj)

А SConstruct просто:

import sys

SConscript('src/SConscript', variant_dir='Release-'+sys.platform, duplicate=0, exports={'MODE':'release'})
SConscript('src/SConscript', variant_dir='Debug-'+sys.platform, duplicate=0, exports={'MODE':'debug'})

Я запускаю scons из каталога, в котором находится SConstruct (то есть каталог верхнего уровня).

Я немного посмотрел и, согласно документу scons, # должен сообщать scons генерировать путь из текущего каталога SConscript (который является каталогом src) - я предполагаю, что это вместо каталог SConstruct ??? Кроме того, я не вижу никаких вопросов об этой конкретной проблеме (на этом сайте или через Google в целом), обычно я просто бью людей, спрашивающих скрипты scons для точной настройки, которая у меня уже есть (которая заключается в добавить «включить» в CPPPATH).

Есть какие-нибудь мысли о том, куда все идет не так?

1 Ответ

4 голосов
/ 02 ноября 2011

'#' относится к SConstruct верхнего уровня согласно руководству SCons http://scons.org/doc/HTML/scons-user/x3240.html

Сценарии, которые вы предоставили выше, успешно создаются, когда я заново создаю указанное вами дерево.Вот рабочий вывод:

scons: Reading SConscript files ...
scons: done reading SConscript files. 
scons: Building targets ... 
g++ -o Release-cygwin/file.os -c -Iinclude src/file.cpp 
g++ -o Release-cygwin/device.dll -shared Release-cygwin/file.os 
g++ -o Debug-cygwin/file.os -c -Iinclude src/file.cpp 
g++ -o Debug-cygwin/device.dll -shared Debug-cygwin/file.os 
scons: done building targets.
...