使用 raspberry pi 进行测试/部署构建的条件编译
conditional compilation for test / deploy build with raspberry pi
我正在为 raspberry pi 构建一个应用程序,并使用 pi4j 作为 GPIO 上软件 PWM 的依赖项。不过,我想在我的本地机器上测试我的代码,所以我想在没有 pi4j 依赖项的情况下编译我的代码并跳过对库的方法调用。
示例代码:
(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))
)
pi4j 需要 wiringPi C 库,它仅在 raspberry pi 上可用(这是有道理的)。为了在我的开发机器上进行测试,看到日志打印输出就足够了。我不想注释掉 :import
和测试方法调用,我想要一个更优雅的解决方案。
除了条件编译是否是这里最好的方法的问题,使用 leiningen 条件编译 files 并不困难:将要条件编译的文件放在文件夹中不同于 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 个实现并确保只加载与您的环境相关的 类。
我正在为 raspberry pi 构建一个应用程序,并使用 pi4j 作为 GPIO 上软件 PWM 的依赖项。不过,我想在我的本地机器上测试我的代码,所以我想在没有 pi4j 依赖项的情况下编译我的代码并跳过对库的方法调用。
示例代码:
(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))
)
pi4j 需要 wiringPi C 库,它仅在 raspberry pi 上可用(这是有道理的)。为了在我的开发机器上进行测试,看到日志打印输出就足够了。我不想注释掉 :import
和测试方法调用,我想要一个更优雅的解决方案。
除了条件编译是否是这里最好的方法的问题,使用 leiningen 条件编译 files 并不困难:将要条件编译的文件放在文件夹中不同于 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 个实现并确保只加载与您的环境相关的 类。