使用raspberry pi进行测试/部署构建的条件编译

时间:2015-07-13 09:23:13

标签: build clojure leiningen conditional-compilation

我正在为raspberry pi构建一个应用程序,并使用pi4j作为GPIO上软件PWM的依赖项。我想在我的本地机器上测试我的代码,所以我想在没有pi4j依赖项的情况下编译我的代码并跳过对库的方法调用。

示例代码:

public function getByID($id)
    {
    $query = $this->db->query("SELECT * FROM properti WHERE nID = '$id'");
    $result = $query->result_array();
    return $result;
    }

pi4j需要wiringPi C库,它只能在树莓派上使用(这很有意义)。要在我的开发机器上进行测试,只需查看日志打印输出即可。我不想评论(ns led-server.model (:require [clojure.tools.logging :as log]) (:import [com.pi4j.wiringpi SoftPwm Gpio])) ;; pi4j dependency, only compiles on rPi (defn- soft-pwm-write [pin value] (let [ival (Math/round (double (* value RANGE)))] (SoftPwm/softPwmWrite pin ival) ;; call to pi4j. This is what I want to skip (log/info "pin" pin "set to" ival)) ) 和方法调用测试,我想要一个更优雅的解决方案。

1 个答案:

答案 0 :(得分:3)

除了问题是条件编译是否是最好的方法之外,使用leiningen有条件地编译文件并不困难:将要编译的文件有条件地放在与src / clj不同的文件夹中,并将其定义为配置文件中的源文件夹:

:profiles {
    :native {:source-paths ["src/native/clj/"]}
    :mock {:source-paths ["src/mock/clj/"]}

然后,使用个人资料运行leininig:

lein with-profiles +mock repl

https://github.com/technomancy/leiningen/blob/master/doc/PROFILES.md

了解详情

在您的情况下,您可以定义协议,提供2个实现,并确保只加载与您的环境相关的类。