相对目录路径GNU make

时间:2017-10-24 11:03:03

标签: gnu-make relative-path

我已经定义了一个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

问题是如何从另一个目录动态查找路径。

4 个答案:

答案 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))