首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调用/调用fsc,F#编译器,从假?

如何调用/调用fsc,F#编译器,从假?
EN

Stack Overflow用户
提问于 2014-06-20 12:59:34
回答 3查看 638关注 0票数 4

如何告诉file使用.fs编译fsc文件

解释如何传递像-a-target:dll这样的参数的额外积分。

编辑:我应该澄清,我试图在没有MSBuild/xbuild/.sln文件的情况下这样做。换句话说,我想要假的完全取代MSBuild/xbuild。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-21 01:44:40

F#有直接调用F#编译器的任务。通常您可以使用Fsc任务。如果希望目标将F#源文件MyFile.fs编译为MyFile.exe,则可以:

代码语言:javascript
复制
Target "MyFile.exe" (fun _ ->
  ["MyFile.fs"]
  |> Fsc (fun ps -> ps))

Fsc任务允许您编译多个源文件并指定每个F#编译参数。这个简单的例子并不能做到这一点,但是你可以。要了解细节,请前往本教程

票数 3
EN

Stack Overflow用户

发布于 2014-06-20 13:16:22

我建议您在这个主题上阅读关于假制作的伊恩·巴特斯比的网页

代码摘录:

第一:

代码语言:javascript
复制
#!/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

然后

代码语言:javascript
复制
#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"
票数 1
EN

Stack Overflow用户

发布于 2015-01-03 09:56:40

这里有一个可能有用的--尽管公认是很小的--对Yawar上面的答案的扭曲,这可能使它更适合于你可能遇到的其他假例子。

Fsc助手函数需要一个文件名的字符串列表,就其本身而言,这是很好的。但是大多数示例使用!!操作符查找文件,这将导致FileIncludes,而这恰好不是一个字符串列表。您可以将FileIncludes转换为适合于使用Seq.toListFsc提供的字符串列表。

为了彻底起见,我还将事物转换为相对路径名(可能只是个人的怪癖)。

下面是一个搜索所有*.fs文件并使用一些有代表性的编译器选项编译它们的示例:

代码语言:javascript
复制
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所指出的,本教程中包含了大量其他编译器选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24327872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档