2009-05-28 29 views
5

tôi cố gắng thiết lập một hệ thống xây dựng để xây dựng một chia sẻ lib MySharedLib và nhị phân MyBinary mà dựa vào MySharedLib. Hệ thống xây dựng sẽ có thể cài đặt MySharedLibMyBinary khi được yêu cầu và chỉ khi được yêu cầu.thực hiện một mục tiêu 'cài đặt' với SCons

import os.path 

env = Environment() 
env.Append(CCFLAGS='-g -Wall -ansi -O2') 

prefix = '/usr/local' 
lib_dir = os.path.join(prefix, 'lib') 
bin_dir = os.path.join(prefix, 'bin') 
Export('env prefix lib_dir bin_dir') 

libMySharedLib = SConscript('libMySharedLib/SConscript') 
MyBinary = SConscript('MyBinary/SConscript') 

env.Alias('install', env.Install(lib_dir, libMySharedLib)) 
env.Alias('install', env.Install(bin_dir, MyBinary)) 

Khi tôi chạy SCons không có đối số dòng lệnh, MySharedLib và MyBinary được tạo, nhưng nó cũng cố gắng cài đặt chúng. Tôi muốn chúng được cài đặt chỉ khi tôi yêu cầu mục tiêu cài đặt. Tôi đã thử nhiều lần, đọc tài liệu, nhưng tôi không thể hiểu được.

+0

Thật thú vị, tôi có vấn đề đối diện chính xác (như được mô tả trong [link] (http://stackoverflow.com/questions/24189440/scons-always-install-after-build)) Tôi muốn cài đặt xảy ra với bản dựng, nhưng tôi không thể ép buộc nó hoạt động! Tôi phải nói rõ ràng 'scons install' hoặc' scons/usr/local/bin' (cho ví dụ thư mục của bạn). Khi bạn nhìn thấy điều này, bạn đã chạy scons trong/usr/local? Sự khác biệt cũng là bạn cài đặt với kết quả của một SConscript, trong khi tôi làm điều đó với kết quả của một số Builder, nhưng tại sao lại quan trọng ... –

Trả lời

6

Theo mặc định và khi không có mục tiêu nào được đặt thành tập lệnh scons, thì scons sẽ tạo mọi mục tiêu trong '.'. Bạn có thể kiểm soát mục tiêu để xây dựng theo mặc định với chức năng mặc định:

lib = SConscript('libMySharedLib/SConscript') 
bin = SConscript('MyBinary/SConscript') 

env.Alias('install', env.Install(lib_dir, lib)) 
env.Alias('install', env.Install(bin_dir, bin)) 

# By default (scons called with no explicit target), only build bin 
Default(bin) 

AFAIK, không có cách nào để nói với scons để xây dựng gì cả, mặc dù bạn có thể tạo ra một mục tiêu giả Tôi cho rằng.

+1

Bạn có thể gọi Default (None) để chỉ định không có mục tiêu theo mặc định. Khoảng một nửa xuống dưới trang: http://www.scons.org/doc/production/HTML/scons-user/x2805.html#AEN2824 –

Các vấn đề liên quan