SConscript에서 scons 함수 Glob
의 사용과 관련된 이상한 오류가 발생했습니다. 내 실제 빌드 스크립트는 더 복잡하지만 다음과 같은 최소한의 예제로 좁혔습니다. 기본 SConstruct에서 SConscript에서 Glob을 사용하여 scons 오류가 발생했습니다.
SConscript('SConscript',
variant_dir='build')
다음, SConscript에서 :
Glob('*.cc')
이 오류 메시지 TypeError : Tried to lookup Dir 'build' as a File.
으로 종료 이는 V2.1.0 및 v2.3.0 모두에서 테스트되었습니다 .
많은 해결 방법을 찾았지만 어느 것도 완전히 만족스럽지 않습니다.
- SConscript를 하위 디렉토리로 이동하면 오류없이 scons가 실행됩니다. 그러나 그렇게되면 내 전체 src 트리가 하위 디렉토리로 이동해야하므로 지저분한 느낌이 들게됩니다.
- scons를 실행하기 전에
build
디렉토리를 만들면 scons가 오류없이 실행됩니다. 그러나이 작업은 추가 단계가 필요하며 빈 디렉토리는 git과 잘 작동하지 않습니다. - SConscript를 호출하기 전에
Execute(Mkdir('build'))
행을 추가 할 수 있습니다. 그러나 이것은scons -n
으로 드라이 런을 수행 할 때 작동하지 않습니다. duplicate=False
으로 SConscript를 호출 할 수 있습니다. 오류가 발생하지 않습니다. 그러나 설명서를 이해하면 포함 파일의 위치에 따라 빌드에서 오류가 발생할 수 있습니다.
나는 근본적으로 문제의 근본 원인을 이해하지 못하고있다. 이 문제에 대한 깨끗한 해결책이 있습니까?
편집 : 오류 메시지의 원인이되는 코드뿐만 아니라 내 의도에 대한 추가 세부 정보를 추가해야합니다. 나는 리눅스 실행 파일과 Windows 실행 파일을 동시에 컴파일하기위한 빌드 파일을 만들려고 시도하고있다.
먼저 SConstruct에 컴파일 환경을 설정하십시오.
import os
win32 = Environment()
win64 = Environment()
linux = Environment()
#Define the working directory
win32['SYS'] = 'win32'
win64['SYS'] = 'win64'
linux['SYS'] = 'linux'
#Define the compilers
win32.Replace(CXX='i686-w64-mingw32-g++')
win64.Replace(CXX='x86_64-w64-mingw32-g++')
#Define the appropriate file formats
win32.Replace(SHLIBPREFIX='')
win32.Replace(SHLIBSUFFIX='.dll')
win32.Replace(PROGSUFFIX='.exe')
win32.Append(LINKFLAGS='-static')
win64.Replace(SHLIBPREFIX='')
win64.Replace(SHLIBSUFFIX='.dll')
win64.Replace(PROGSUFFIX='.exe')
win64.Append(LINKFLAGS='-static')
for env in [win32,win64,linux]:
build_dir = os.path.join('build',env['SYS'])
exe = SConscript('SConscript',
variant_dir=build_dir,
exports=['env'])
그런 다음 SConscript에 실제 빌드 규칙이 있습니다.
Import('env')
env.Append(CPPPATH=['include'])
for main in Glob('*.cc'):
env.Program([main, Glob('src/*.cc')])
이 scons -n
로 호출 할 때 위의 에러 메시지를 나타낸다.
SConstruct 및 SConscript의 전체 내용을 표시하지 않으므로 완전한 예는 아닙니다. 깨끗한 MWE가 없어도 깨끗한 솔루션을 제공하기는 어렵습니다. ;) – dirkbaechle
나는 오류의 실제 예제로 압축하여 생각하면 진단하기가 더 쉬울 것이라고 생각했기 때문에 사과드립니다. 내가 성취하려고하는 것에 대한 추가 세부 사항으로 게시물을 편집 할 것입니다. –
원본 폴더 또는 최상위 위치에 'build.cc'파일이 있습니까? – dirkbaechle