如何将文件集中的所有文件作为参数添加到 exec 任务?
我试图通过 ant 将文件夹中的所有 *.cpp 文件提供给 C++ 编译器。但我得到的只是 ant 给 gpp 一个巨大的字符串包含所有文件。我试图通过使用一个小型测试应用程序来证明这一点:
int main( int argc, char**args ){
for( --argc; argc != 0; --argc ) printf("arg[%d]: %s\n",argc,args[argc]);
}
使用这样的 ant 脚本:
<target name="cmdline">
<fileset id="fileset" dir=".">
<include name="*"/>
</fileset>
<pathconvert refid="fileset" property="converted"/>
<exec executable="a.exe">
<arg value="${converted}"/>
</exec>
</target>
我的 a.exe 的输出是这样的:
[exec] arg[1]: .a.cpp.swp .build.xml.swp a.cpp a.exe build.xml
现在的问题是:如何单独提供文件集中的所有文件作为可执行文件的参数?
I'm trying to provide all *.cpp files in a folder to the c++ compiler through ant. But I get no further than ant giving gpp a giant string containing all the files. I tried to prove it by using a small test application:
int main( int argc, char**args ){
for( --argc; argc != 0; --argc ) printf("arg[%d]: %s\n",argc,args[argc]);
}
With the ant script like this:
<target name="cmdline">
<fileset id="fileset" dir=".">
<include name="*"/>
</fileset>
<pathconvert refid="fileset" property="converted"/>
<exec executable="a.exe">
<arg value="${converted}"/>
</exec>
</target>
My a.exe's output is this:
[exec] arg[1]: .a.cpp.swp .build.xml.swp a.cpp a.exe build.xml
Now here's the question: how do I provide all files in the fileset individually as an argument to the executable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这就是 ANT 中的 apply 任务旨在支持的内容。
例如:
并行参数使用所有文件作为参数运行一次程序。
This is what the apply task in ANT was designed to support.
For example:
The parallel argument runs the program once using all the files as arguments.
找到了:差异似乎在于
arg值
与arg 行
。产生了预期的输出:
Found it: the difference seems to lie in
arg value
vs.arg line
.resulted in the expected output:
基于这篇文章,这里是说明如何使用
pathconvert
的完整代码任务:上面的代码假设路径中没有空格。
要支持路径中的空格,请将上面的
pathconvert
行更改为:并将
arg
行更改为:来源:将 Ant 文件集转换为多个应用参数。
Based on this article, here is the complete code illustrating the use of the
pathconvert
task:Above code assumes there are no spaces in the paths.
To support spaces in paths, change above
pathconvert
line to:and
arg
line to:Source: Converting an Ant fileset to multiple apply args.
您看过 ant
cpptasks
吗?这将允许您以更加以 Ant 为中心的方式将 C++ 编译集成到 Ant 构建中。例如,使用文件集指定要编译的文件。下面是示例(与 Ant 1.6 或更高版本兼容):
Have you looked at the ant
cpptasks
? This would allow you to integrate C++ compilation into your Ant build in a more Ant-centric fashion. For example, specifying files to be compiled using a fileset.Here is the example (compatible with Ant 1.6 or later)::