M
Magnus Falk
I'm making myself a build environment and found this Rake thingy that
seemed just to good to pass upon. But since I don't know any Ruby I'm
struggling a bit.
I'm making a couple of tasks to compile and link C++ code and it seems
like I've misunderstood the file task somewhat. In the example code
below, the compilation and linking is never run, what am I doing wrong?
cppTasks.rb:
def compileTask inclDirs, flags
inclDirs = inclDirs.collect { |dir| '-I' + dir }
inclDirs = inclDirs.join(' ')
flags = flags.join(' ')
SRC_FILES.each do |srcFile|
objFile = File.join(OBJ_DIR, srcFile.pathmap("%f").ext('o'))
file objFile => [srcFile] do
sh "g++ #{inclDirs} #{flags} -c #{srcFile} -o #{objFile}"
end
end
end
def linkTask libDirs, libs, flags, target
libDirs = libDirs.collect { |dir| '-L' + dir}
libs = libs.collect { |lib| '-l' + (lib[/lib(.+)\./, 1])}
flags = flags + ((File.extname(target) == '.so') ? ['-shared'] :
['-c'])
libDirs = libDirs.join(' ')
libs = libs.join(' ')
flags = flags.join(' ')
targetFile = File.join(BUILD_DIR, target)
file targetFile => OBJ_FILES do
objFiles = OBJ_FILES.collect { |objFile| objFile + ' ' }
sh "g++ #{libDirs} #{libs} #{flags} #{objFiles} -o #{targetFile}"
end
end
Cheers,
Magnus
seemed just to good to pass upon. But since I don't know any Ruby I'm
struggling a bit.
I'm making a couple of tasks to compile and link C++ code and it seems
like I've misunderstood the file task somewhat. In the example code
below, the compilation and linking is never run, what am I doing wrong?
cppTasks.rb:
def compileTask inclDirs, flags
inclDirs = inclDirs.collect { |dir| '-I' + dir }
inclDirs = inclDirs.join(' ')
flags = flags.join(' ')
SRC_FILES.each do |srcFile|
objFile = File.join(OBJ_DIR, srcFile.pathmap("%f").ext('o'))
file objFile => [srcFile] do
sh "g++ #{inclDirs} #{flags} -c #{srcFile} -o #{objFile}"
end
end
end
def linkTask libDirs, libs, flags, target
libDirs = libDirs.collect { |dir| '-L' + dir}
libs = libs.collect { |lib| '-l' + (lib[/lib(.+)\./, 1])}
flags = flags + ((File.extname(target) == '.so') ? ['-shared'] :
['-c'])
libDirs = libDirs.join(' ')
libs = libs.join(' ')
flags = flags.join(' ')
targetFile = File.join(BUILD_DIR, target)
file targetFile => OBJ_FILES do
objFiles = OBJ_FILES.collect { |objFile| objFile + ' ' }
sh "g++ #{libDirs} #{libs} #{flags} #{objFiles} -o #{targetFile}"
end
end
Cheers,
Magnus