我正在为我的新node.js模块编写binding.gyp
文件。我的所有源文件都在src/
子目录下。我想在构建模块时使用所有这些。我不是每次添加新的cpp文件时都修改binding.gyp,而是希望通过一些通配符机制列出所有cpp文件。 node-gyp支持吗?跟随之类的东西(不起作用)
{
'targets' : [
{
'target_name' : 'mymod',
'sources' : 'src/*.cpp'
}
]
}
我看了https://code.google.com/p/gyp/wiki/InputFormatReference,但没有找到任何有用的东西。
答案 0 :(得分:22)
想出来
{
'targets' : [
{
'target_name' : 'mymod',
'sources' : [ '<!@(ls -1 src/*.cpp)' ],
}
]
}
<强>更新强>
上述解决方案无法跨平台移植。这是一个便携版本:
{
'targets' : [
{
'target_name' : 'mymod',
'sources' : [ "<!@(node -p \"require('fs').readdirSync('./src').map(f=>'src/'+f).join(' ')\")" ],
}
]
}
基本上,它使用节点的ls
模块列出目录内容的Javascript代码替换特定于平台的目录列表命令(fs
)。
答案 1 :(得分:0)
要过滤诸如 private void showLookupDetailsDialog(String[] headings, String key, String value) {
final TextView tv = new TextView(this);
String[] valueArray = {};
valueArray = value.split(";");
String displayString = "";
if (valueArray.length > 1) {
for (int i = 0; i < valueArray.length - 1; i++) {
displayString = displayString + valueArray[i] + "\n";
}
} else {
displayString = valueArray[0];
}
tv.setText(displayString);
tv.setGravity(Gravity.CENTER);
tv.setTextSize(40);
tv.setMaxLines(5);
tv.setScroller(new Scroller(this));
tv.setVerticalScrollBarEnabled(true);
tv.setMovementMethod(new ScrollingMovementMethod());
tv.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
new AlertDialog.Builder(this)
.setTitle(headings[0] + ": " + key)
.setMessage(headings[1] + ": ")
.setView(tv)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
之类的特定文件扩展名并支持预编译的cpp
libraries
文件,我对接受的解决方案作了些许修改:
.a
答案 2 :(得分:0)
如果有人想将所有子文件和文件夹都包含在某个文件夹中(在行尾定义,在此称为“源”):
{
"targets": [
{
"target_name": "addon",
"sources": [
"<!@(node -p \"var fs=require('fs'),path=require('path'),walk=function(r){let t,e=[],n=null;try{t=fs.readdirSync(r)}catch(r){n=r.toString()}if(n)return n;var a=0;return function n(){var i=t[a++];if(!i)return e;let u=path.resolve(r,i);i=r+'/'+i;let c=fs.statSync(u);if(c&&c.isDirectory()){let r=walk(i);return e=e.concat(r),n()}return e.push(i),n()}()};walk('./sources').join(' ');\")"
]
}
]
}
答案 3 :(得分:-1)
更便携的版本(不依赖于节点,而是依赖于python):
"<!@(python -c \"import os; print '\n'.join(['%s' % x for x in os.listdir('.') if x[-3:] == '.cc' and 'test' not in x])\")"