2 votes

scons génère une directive de chemin d'inclusion incorrecte dans le build

J'ai une construction de scons qui utilise une configuration de répertoire simple et commune :

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

Dans file.cpp, j'inclus header.h via #include "namespace/header.h". Ce que je veux faire, c'est simplement ajouter le répertoire d'inclusion à la liste des chemins d'inclusion. Du point de vue des sources (et de SConscript), ce chemin est "../include" mais la commande de compilation contient toujours un chemin invalide pour l'inclusion. J'ai essayé ce qui suit dans le 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"])

dont aucune ne semble fonctionner. Les quatre premières donnent "-Iinclude" alors que la dernière place l'include au niveau du répertoire au-dessus du projet ! Voici le SConscript complet

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)

Et la SConstruct est juste :

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'})

J'exécute scons depuis le répertoire où se trouve la SConstruct (c'est-à-dire le répertoire de premier niveau).

J'ai fait quelques recherches et selon la doco de scons, le # est censé dire à scons de générer le chemin à partir du répertoire courant du SConscript (qui est le répertoire src) - je suppose que c'est au lieu du répertoire SConstruct ??? De plus, je ne vois aucune question sur ce problème particulier (sur ce site ou via Google en général), habituellement je me heurte juste à des gens qui demandent scons scripts pour exactement la configuration que j'ai déjà (qui est d'ajouter "include" au CPPPATH).

Vous avez une idée de l'endroit où ça se passe mal ?

4voto

TJD Points 7208

'#' est relatif à la SConstruct de premier niveau, conformément au manuel SCons. http://scons.org/doc/HTML/scons-user/x3240.html

Les scripts que vous fournissez ci-dessus se construisent avec succès lorsque je recrée l'arbre que vous spécifiez. Voici la sortie de travail :

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X