Не удается найти glm.hpp при компиляции с помощью SCons

Я пытаюсь скомпилировать проект, но SCons не может найти glm/glm.hpp... Это мой SConstruct:

VariantDir('build', '.')
env=Environment(CPPPATH=['.'], CPPDEFINES=[], LIBS=[], CXXFLAGS="-std=c++0x")
env.Program(target='exec_test', source=[Glob('build/*.cpp'), Glob('build/*.hpp')])

и это вывод:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
g++ -o build/game.o -c -std=c++0x -I. build/game.cpp
g++ -o build/main.o -c -std=c++0x -I. build/main.cpp
g++ -o exec_test build/game.o build/main.o build/game.hpp
build/game.hpp:15:23: fatal error: glm/glm.hpp: No such file or directory
 #include <glm/glm.hpp>
                       ^
compilation terminated.
scons: *** [exec_test] Error 1
scons: building terminated because of errors.

main.cpp , game.cpp и game.hpp находятся в текущем каталоге, а glm.hpp — в glm/glm.hpp (из текущего каталога)

Что я делаю неправильно?

Редактировать:

Я немного отредактировал и понял очень странную вещь: я получаю ошибку только в game.hpp! Я также попытался удалить строку включения glm, и я получил предупреждение о том, что некоторый код доступен только в С++ 11. Это означает, что ни один из аргументов построения scons не используется для game.hpp. Я также попытался включить glm в main.cpp и game.cpp, и он скомпилировался без ошибок или предупреждений. Думаю, дело не в файле game.hpp, а в том, что scons не собирает файлы .hpp с аргументами в SConstruct.


person Qualphey    schedule 19.10.2013    source источник
comment
потому что они копируются в каталог сборки при компиляции   -  person Qualphey    schedule 19.10.2013
comment
Попробуйте сначала без вызова VariantDir, чтобы исключить любые проблемы с путями включения, вызванные вариантным каталогом.   -  person Brady    schedule 19.10.2013
comment
Наблюдение, которое, вероятно, является причиной вашей последней проблемы с game.hpp: вы не должны перечислять файлы заголовков в качестве исходных файлов при вызове Program(), поскольку вы обычно не компилируете заголовки.   -  person Brady    schedule 20.10.2013
comment
Если у вас все еще возникают проблемы с включенными путями, вам следует попытаться определить, связано ли это с VariantDir или с тем, что вы используете '.' в качестве пути включения вместо, возможно, «#», который SCons интерпретирует как относительный к корневому каталогу.   -  person Brady    schedule 20.10.2013
comment
после удаления заголовков из исходного списка у меня не возникает проблем с включением заголовков. Вы можете написать это в качестве ответа, и я приму это! :)   -  person Qualphey    schedule 20.10.2013


Ответы (1)


Вы не должны включать заголовочные файлы в исходный список при компиляции. Попробуйте изменить свой вызов на Program() следующим образом:

env.Program(target='exec_test', source=[Glob('build/*.cpp')])
person Brady    schedule 21.10.2013