2016-04-21 1 views
-1

J'ai été aux prises avec le problème le plus mineur que j'ai jamais rencontré en travaillant avec SCons, mais cette trivialité ne semble pas disparaître aussi facilement que le question elle-même est.Comment faire scons ajouter une barre oblique '/' dans le chemin d'accès libpathique

Alors, voici la situation.

J'ai un projet qui compile parfaitement lorsque je viens d'ajouter une seule barre oblique à la fin d'un chemin de librairie dans l'une des bibliothèques système de XCode.

Quand je donne cela à SCons, c'est un peu comme des bandes qui coupent et invoquent un g ++ -out sans ce slash. Lorsque j'utilise manuellement la commande g ++ invoquée avec la barre oblique, cela fonctionne.

Vous trouverez ci-dessous les extraits de code qui vous aideront à comprendre.

C'est le code qui ajoute la bibliothèque:

env.AppendUnique(LIBPATH = [r'/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system/']) 

Comme vous pouvez le voir, j'ai une barre oblique derrière 'usr/lib/système.

Et voici le g ++ commande invoquée par SCons:

g++ -o output.dylib stuff.os -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system -otherstuff... 

Comme vous pouvez le voir, la barre oblique est déclenché hors à la fin.

Donc, si je fais ceci:

g++ -o output.dylib stuff.os -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system/ -otherstuff... 

Tout fonctionne parfaitement.

Des idées sur la façon de résoudre ce problème stupide d'un débutant stupide?

Un grand merci à vous les gars à l'avance!

+0

Celui-ci est peut-être en rapport http://stackoverflow.com/questions/4403253/how-to-run-g-from-a-terminal-window-on-my-mac. – dirkbaechle

+0

@dirkbaechle Je ne sais pas comment ajouter le support de développement Unix dans XCode 7.3 –

+0

Le lien donné explique comment procéder.Quelles étapes avez-vous essayé et quels types de messages d'erreur avez-vous rencontrés? Si vous pouvez répondre à ces deux questions, s'il vous plaît utilisez-les pour ouvrir une nouvelle question sur SO lorsque vous rencontrez de nouveaux problèmes que vous ne parvenez pas à surmonter, après avoir sérieusement essayé ... Je ne suis pas un utilisateur MAC, donc je ne peux pas aider Je suppose que vous êtes plus loin. – dirkbaechle

Répondre

2

Comme vous avez pu le constater, SCons interprète les chemins de la bibliothèque lors de la construction de la commande link. Vous pouvez contourner ce problème en fournissant les indicateurs à la commande de lien directement via la variable d'environnement LINKFLAGS, en ignorant LIBPATH pour les chemins qui causent des problèmes. Cela rend votre SConstruct un peu moins portable car vous devez spécifier les options de la ligne de commande vous-même.

SConstruct:

# SConstruct 
libdir1 = '/Users/dave/lib1/' 
libdir2 = '/Users/dave/lib2/' 
env = Environment(LIBPATH = libdir1, LINKFLAGS = ['-L' + libdir2]) 
program = env.Program('test', 'test.c') 

génère la sortie suivante:

$ scons 
scons: Reading SConscript files ... 
scons: done reading SConscript files. 
scons: Building targets ... 
gcc -o test.o -c test.c 
gcc -o test -L/Users/dave/lib2/ test.o -L/Users/dave/lib1 
scons: done building targets. 

Notez que l'espace de fuite sur lib2 est préservée.

Ce n'est pas clair pour moi pourquoi cette erreur se produit et la cause première mérite une enquête plus approfondie.

+0

Vous savez quoi? Je l'ai compris il y a quelques minutes, et je ne sais pas pourquoi cela se produit non plus! Mais oui merci beaucoup pour votre réponse. Cela m'a donné une deuxième confirmation que je ne suis pas le seul à avoir souffert de ce problème et à devoir me frayer un chemin. –