What is it
GFlat is a very easy to use scaffolding solution for simple Mono / F# projects. It uses Paket, FAKE and Forge. These tools, while powerful, may be not straightforward to use; GFlat is not powerful but allows you to start with F# project in a very straightforward manner.
You are using
mono, have working
w3m and ready to download half of the
How to use
Grab the release; unarchive it. GFlat will create the project consisting of the
following parts: library, main application and tests for the library. You may
want to edit
Makefile and specify the name for the main application (
default it is
Program) and for the library (
LIB, by default it is
The test project will be named automatically, by appending
.Test to the
After you have specified desired names, run
make populate and let it run till
the end. That's it.
What will you get?
- the library is
- the main application in
- the test project in
src/test, set up for usage of
Both the main application and the test project have the library set as a reference, so you can start using it right away.
Four targets for
make buildcompiles the library and main application; you'll find the resulting
make rundoes the same as above plus the compiled application will be run when it is ready.
make testcompiles the library, the tests, and runs the tests with NUnit3 console runner.
make releasebuilds the release (i.e. non-debug) version of the application.
Notice that the source code will be checked by FSharpLint and the build will fail in case of any warnings.
Example of usage
make populate(...runs for ages, downloads half of the internet; in the process you will see some ignored errors from Forge...)
Done. Ignored errors are safe to ignore. Application source code is in src/app/Program/Program.fs Library source code is in src/lib/Lib/Lib.fs Tests source code is in src/test/Lib.Test/Lib.Test.fs Try 'make test' now. Happy hacking!
src ├── app │ └── Program │ ├── App.config │ ├── Program.fs │ ├── Program.fsproj │ └── paket.references ├── lib │ └── Lib │ ├── Lib.fs │ ├── Lib.fsproj │ └── paket.references └── test └── Lib.Test ├── Lib.Test.fs ├── Lib.Test.fsproj └── paket.references 6 directories, 10 files
make build && ls build/(...some noise...)
FSharp.Core.dll Lib.dll.mdb Program.exe.config Lib.dll Program.exe Program.exe.mdb
make run(should calculate 3 squared) (...some noise...)
make test(...some noise...)
1) Failed : Lib.Test.Example Test Expected: 3 But was: 4
I did this only to simplify the things for myself when playing with F#. Tested only on Mac. If it works for you and you find it useful -- great! If not, report the problem and I may have a look. Or send a patch.
Summary: BSD 2-clause
Copyright (c) 2016, Alexey Vyskubov firstname.lastname@example.org All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.