我一直在研究Rake中的CI系统中的构建脚本(使用C ++构建的项目)。我一直在玩一个简单的“hello world”应用程序,看看rake能做什么。一切顺利,直到我决定将.h文件放入include文件夹,将.cpp文件放入src文件夹。 Rake能够找到.cpp文件,但不能找到包含头文件。文件结构如下:
src/main.cpp
src/greet.cpp
include/greet.h
rake script was as follows:
require 'rake/clean'
require 'rake/loaders/makefile'
APPLICATION = 'hello.exe'
C_FILES = FileList['src/*.cpp']
HDR_FILES = FileList['include/*.h']
ALL_FILES = [C_FILES] + HDR_FILES
O_FILES = C_FILES.sub(/\.cpp$/, '.o')
file '.depend.mf' do
sh "makedepend -f- -- -- #{ALL_FILES} > .depend.mf"
end
import ".depend.mf"
file APPLICATION => O_FILES do |t|
sh "gcc #{O_FILES} -o #{t.name}"
end
rule ".o" => [".cpp"] do |t|
sh "gcc -c -o #{t.name} #{t.source}"
end
C_FILES.each do |src|
file src.ext(".o") => src
end
CLEAN.include("**/*.o")
CLEAN.include(APPLICATION)
CLEAN.include(".depend.mf")
task :default => APPLICATION
非常感谢任何帮助。
答案 0 :(得分:1)
这一行:ALL_FILES = [C_FILES] + HDR_FILES
应为ALL_FILES = C_FILES << HDR_FILES
一个FileList只是rake为我们提供的一个奇特的数组,但它只是一个阵列,所以我们可以使用它上面的所有标准数组运算符。
<<
运算符会将HDR_FILES数组中的所有项追加到C_FILES数组的末尾。
使用 +
运算符将HDR_FILES数组作为单个元素添加到C_FILES数组的末尾,从而创建数组数组