我已经定义了一个source.mk,包含make文件中的包含路径文件。我必须提供INCLUDES的绝对文件路径或出现未找到文件的错误。
# Add your include paths to this variable
INCLUDES = -I/home/ecee/C1M1-Abubaker/include/common \
我的make文件位于:
~/home/ecee/C1M1-Abubaker/
并且头文件需要包含在:
中~/home/ecee/C1M1-Abubaker/include/common
问题是如何从另一个目录动态查找路径。
答案 0 :(得分:1)
您可以使用realpath
make function:
$(realpath names…)
对于名称中的每个文件名,返回规范的绝对名称。规范名称不包含任何
.
或..
组件,也不包含任何重复的路径分隔符(/
)或符号链接。如果发生故障,则返回空字符串。有关可能的失败原因列表,请参阅realpath(3)
文档。
在您的情况下,那可能是$(realpath include/common)
。
答案 1 :(得分:1)
OP说
...或者找不到文件错误
类似的东西:
mustexist = $(or $(realpath $1),$(error Path [$1] does not exist!))
1.o: 1.cpp
gcc -I$(call mustexist,${INCLUDES}) $< -o $@
如果$(realpath …)
扩展为空(路径不存在),
然后 make 扩展$(error …)
,构建停止。
作为一种改进,
如果${INCLUDES}
可以扩展到多个文件夹(如其名称所暗示的那样),
那么你应该单独测试每条路径。
mustexist = $(or $(realpath $1),$(error Path [$1] does not exist!))
includes = $(foreach _,$1,-I$(call mustexist,$_))
1.o: 1.cpp
gcc $(call includes,${INCLUDES}) $< -o $@
答案 2 :(得分:0)
要在上面的目录中搜索文件,您可以使用class GradientButton: UIButton {
public let buttongradient: CAGradientLayer = CAGradientLayer()
override var isSelected: Bool { // or isHighlighted?
didSet {
updateGradientColors()
}
}
func updateGradientColors() {
let colors: [UIColor]
if isSelected {
colors = [UIColor(hexString: "#ef473a")!, UIColor(hexString: "#cb2d3e")!]
} else {
colors = [UIColor(hexString: "#29a1e2")!, UIColor(hexString: "#485ac8")!]
}
buttongradient.colors = colors.map { $0.cgColor }
}
override init(frame: CGRect) {
super.init(frame: frame)
self.setupGradient()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setupGradient()
}
override func layoutSubviews() {
super.layoutSubviews()
self.updateGradient()
}
func setupGradient() {
buttongradient.startPoint = CGPoint(x: 1.0, y: 0.0)
buttongradient.endPoint = CGPoint(x: 0.0, y: 1.0)
self.layer.insertSublayer(buttongradient, at: 0)
updateGradientColors()
}
func updateGradient() {
buttongradient.frame = self.bounds
buttongradient.cornerRadius = buttongradient.frame.height / 2
}
}
以及上面的两个目录:-I./include/common
答案 3 :(得分:0)
以下建议是添加一个文件夹的直接方法。
尝试这样,这应该可以解决您的问题。
INCLUDES:=/home/ecee/C1M1-Abubaker/include/common
<compiler and your source files> -I../$(realpath $(INCLUDES))