我有一个简单的C#程序,需要在Linux中通过mono运行命令行。到目前为止,这是我的makefile的内容。它基于我为另一个程序找到的C ++ makefile。我尝试修改它以使用我的C#程序,但它说某些源文件无法找到。
.PHONY : build view clean
build : test
@# do nothing
test : test.o
gmcs test test.o
test.o : test.cs
gmcs test.cs
view :
@\less test.cs
clean :
-\rm *.exe
-\rm test
我以前从未使用过makefile,所以我真的不知道自己做错了什么。我的整个项目中只有一个文件,而这只是test.cs.这样做的最终目标是能够通过在命令行中输入来运行程序:
./test
它应该清理生成的.exe文件。
答案 0 :(得分:2)
我整理了一个非常简单的Mono Makefile,对我有用:
.PHONY: test.cs
all: run
test.exe: test.cs
@gmcs test.cs
clean:
@rm -f test.exe
run: test.exe
@mono test.exe
这有一个很好的属性,如果你只输入'make',它将重新编译并执行test.cs。
答案 1 :(得分:1)
我在我的项目中使用了一个非常简单的Makefile模型。 (PS:我在GNU / Linux上使用mono进行编译,但是更改配置非常容易(阅读我的评论))
<div class="dropdown">
<a class="btn dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">Some title</a>
<div class="dropdown-menu dropdown-menu-right subscribe-box" aria-labelledby="dropdownMenu1">
<ul class="nav nav-pills" id="myTab">
<li class="active"><a href="#" data-target="#mail" data-toggle="tab"><i class="fa fa-envelope-o"></i></a></li>
<li><a href="#" data-target="#twitter" data-toggle="tab"><i class="fa fa-twitter"></i></a></li>
<li><a href="#" data-target="#sms" data-toggle="tab"><i class="fa fa-commenting"></i></a></li>
<li><a href="#" data-target="#rss" data-toggle="tab"><i class="fa fa-rss"></i></a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="mail">
<p>Enter your email address.</p>
<div class="row">
<div class="col-sm-8 input-box">
<input placeholder="name@email.com" type="text">
</div>
<div class="col-sm-4 input-button">
<a href="" class="btn">Subscribe</a>
</div>
</div>
</div>
<div class="tab-pane" id="twitter">
<p>Enter your twitter username</p>
<input placeholder="@username" type="text">
</div>
<div class="tab-pane" id="sms">
<p>phone</p>
<input placeholder="555-123-4567" type="text">
</div>
<div class="tab-pane" id="rss">
<p>rss link</p>
</div>
</div>
</div>
</div>
</div>
答案 2 :(得分:0)
为了回答这个问题,我将详细介绍makefile:
当你有这样的陈述时:
test: test.o
gmcs test test.o
这意味着:为了构建目标测试,您需要目标test.o并运行命令gmcs test test.o
。
当您键入命令行make target
时,它将尝试按照您在makefile中编写的规则构建目标。所以,在我们的例子中,当你执行make test
时,程序将尝试构建测试,看它需要构建test.o之前,找到这个规则:
test.o: test.cs
gmcs test.cs
找到文件test.cs,运行gmcs test.cs
,然后返回上一个目标,然后立即运行gmcs test test.o
,你的目录中没有test或test.o,所以命令报告错误。
令你困惑的是(我可以猜到这一点)是c ++ make文件。在c ++中,您首先创建目标文件(在Linux中为.o,在Windows中为.obj),然后将它们链接在一起。我不确定,但是你对.o目标的c ++ makefile中的命令是使用-c标志 - 一个告诉gcc只编译的标志。在你的情况下,程序在第一个命令之后完全编译。
所以 - 您正在寻找的makefile如下:
PHONY : build view clean
build : test
@# do nothing
test: test.cs
gmcs test.cs -out:test
view :
@\less test.cs
clean :
-\rm *.exe
-\rm test
将创建名为test的文件,您可以使用mono test
运行它。如果你想省略mono
,你可以创建一个脚本文件:
#! /bin/bash
mono test
不要忘记更改权限以允许您执行它!