如何告诉file使用.fs编译fsc文件
解释如何传递像-a和-target:dll这样的参数的额外积分。
编辑:我应该澄清,我试图在没有MSBuild/xbuild/.sln文件的情况下这样做。换句话说,我想要假的完全取代MSBuild/xbuild。
发布于 2014-06-21 01:44:40
F#有直接调用F#编译器的任务。通常您可以使用Fsc任务。如果希望目标将F#源文件MyFile.fs编译为MyFile.exe,则可以:
Target "MyFile.exe" (fun _ ->
["MyFile.fs"]
|> Fsc (fun ps -> ps))Fsc任务允许您编译多个源文件并指定每个F#编译参数。这个简单的例子并不能做到这一点,但是你可以。要了解细节,请前往本教程。
发布于 2014-06-20 13:16:22
我建议您在这个主题上阅读关于假制作的伊恩·巴特斯比的网页。
代码摘录:
第一:
#!/bin/bash
TARGET=$1
BUILDTARGETS=$2
if [ -z "$BUILDTARGETS" ]
then
BUILDTARGETS="/Library/Frameworks/Mono.framework/Libraries/mono/xbuild/Microsoft/VisualStudio/v9.0"
fi
if [ -z "$TARGET" ]
then
CTARGET="Default"
else
CTARGET=`echo ${TARGET:0:1} | tr "[:lower:]" "[:upper:]"``echo ${TARGET:1} | tr "[:upper:]" "[:lower:]"`
fi
if [ ! -d "$BUILDTARGETS" ]
then
echo "BuildTargets directory '${BUILDTARGETS}' does not exist."
exit $?
else
export BUILDTARGETS="$BUILDTARGETS"
fi
echo "Executing command: $CTARGET"
mono packages/FAKE.1.64.6/tools/Fake.exe build.fsx target=$CTARGET然后
#I @"packages/FAKE.1.64.6/tools"
#r "FakeLib.dll"
open Fake
let buildDir = @"./build/"
let testDir = @"./test"
let fxReferences = !! @"*/*.csproj"
let testReferences = !! @"Tests/**/*.csproj"
let buildTargets = environVarOrDefault "BUILDTARGETS" ""
Target "Clean" (fun _ ->
CleanDirs [buildDir; testDir]
)
Target "Build" (fun _ ->
MSBuild buildDir "Build" ["Configuration","Debug"; "VSToolsPath",buildTargets] fxReferences
|> Log "Build-Output: "
)
Target "BuildTest" (fun _ ->
MSBuildRelease testDir "Build" testReferences
|> Log "Test-Output: "
)
Target "Test" (fun _ ->
!! (testDir + @"/*.Tests.dll")
|> xUnit (fun p ->
{ p with
ShadowCopy = true;
HtmlOutput = true;
XmlOutput = true;
OutputDir = testDir })
)
"Clean"
==> "Build"
"Build"
==> "BuildTest"
Target "Default" DoNothing
RunParameterTargetOrDefault "target" "Default"发布于 2015-01-03 09:56:40
这里有一个可能有用的--尽管公认是很小的--对Yawar上面的答案的扭曲,这可能使它更适合于你可能遇到的其他假例子。
Fsc助手函数需要一个文件名的字符串列表,就其本身而言,这是很好的。但是大多数示例使用!!操作符查找文件,这将导致FileIncludes,而这恰好不是一个字符串列表。您可以将FileIncludes转换为适合于使用Seq.toList向Fsc提供的字符串列表。
为了彻底起见,我还将事物转换为相对路径名(可能只是个人的怪癖)。
下面是一个搜索所有*.fs文件并使用一些有代表性的编译器选项编译它们的示例:
Target "BuildApp" (fun _ -> // Compile application source code
!! (srcApp @@ @"**/*.fs") // Look for F# source files
|> Seq.map toRelativePath // Pathnames relative to current directory
|> Seq.toList // Convert FileIncludes to string list
|> Fsc (fun p -> // which is what the Fsc task wants
{p with // Fsc parameters: making an executable,
FscTarget = Exe // for any CPU, directing output to build
Platform = AnyCpu // area (both assembly & XML doc).
Output = ...exe file... // Executable generated
OtherParams = ["--doc:" + ...xmldoc file...) ]})
) // 正如Yawar所指出的,本教程中包含了大量其他编译器选项。
https://stackoverflow.com/questions/24327872
复制相似问题