我有一个简单的测试Makefile:
hello: hello.o
.SUFFIXES: .c .f90 .o
.f90.o:
pgf90 -c -o $@ $<
.c.o:
cc -c -o $@ $<
Run Code Online (Sandbox Code Playgroud)
您不必告诉我它在同一目录中有foo.c和foo.f90会造成混淆.我永远不会真的这样做.我只是想知道Make如何处理一些先例.所以,当我只发出make命令时,make运行:
pgf90 -c -o hello.o hello.f90
cc hello.o -o hello
Run Code Online (Sandbox Code Playgroud)
当然,"cc"链接失败,因为"cc"无法链接FORTRAN对象以生成可执行文件.精细.但我的问题是:我已经尝试了一些我能想到的阻止make使用pgf90命令作为其第一个编译命令,并选择cc命令.我已经改变了后缀规则的顺序.我在.SUFFIXES语句中更改了后缀的顺序.唯一可行的方法是完全不使用.f90后缀规则.为什么会这样,可以改变吗?谢谢.(如果不言而喻,我的目录中确实有简单的hello.f90和hello.c源文件,并且编译和执行都很好.)
更新:使用-d进行运行.相关输出(AFAICT)如下所示:
Considering target file 'hello.o'.
File 'hello.o' does not exist.
Looking for an implicit rule for 'hello.o'.
Trying pattern rule with stem 'hello'.
Trying implicit prerequisite 'hello.c'.
Run Code Online (Sandbox Code Playgroud)
没有给"隐含的先决条件'hello.c'留下深刻的印象",make会在它之前尝试一大堆其他的东西
Found an implicit rule for 'hello.o'.
Considering target file 'hello.f90'.
Looking for an implicit rule with stem 'hello.f90'
.
.
.
No …
Run Code Online (Sandbox Code Playgroud) 我有一个numpy数组A,它有形状(10,).
我也有,作为此时的,具有形状(10,3,5)一个numpy的数组B中.我想在这两者之间进行乘法以得到C,使得C [0,:,] = A [0]*B [0,:,],C [1] = A [1]*B [1 ,:,]]等
我不想用循环来解决这个问题,其中一个原因是事物的美学,另一个原因是这个代码需要非常通用.我希望用户能够输入几乎任何形状的任何B,只要前导尺寸为10.例如,我希望用户能够放入形状B(10,4).
那么:如何使用numpy实现这种乘法?谢谢.
ADDENDUM:有人问过例子.会变小.假设A是numpy数组[1,2,3],B是numpy数组[[1,2],[4,5],[7,8]].我希望两者的乘法得到[[1,2],[8,10],[21,24]]....
>>> a
array([1, 2, 3])
>>> b
array([[1, 2],
[4, 5],
[7, 8]])
>>> #result
>>> c
array([[ 1, 2],
[ 8, 10],
[21, 24]])
>>>
Run Code Online (Sandbox Code Playgroud) 有没有办法在gfortran强制下溢到下溢?
我不敢相信这是第一次有人问这个,但我找不到任何东西.Mea culpa如果这是重复的话.
我想使用linux cut命令从文件中提取列,然后使用paste命令将同一列插入第二个文件.我可以通过保存剪切命令的结果,然后在其上运行粘贴和第二个文件来完成此操作.但在我看来,必须有一些单行程,这不涉及保存中间结果.谁知道那是什么?谢谢.
例如,第一个文件可能看起来像
date weight
1-1-2010 weight1
1-2-2010 weight2
1-3-2010 weight3
Run Code Online (Sandbox Code Playgroud)
而第二个可能看起来像
date blood_press
1-1-2010 bp1
1-2-2010 bp2
1-3-2010 bp3
Run Code Online (Sandbox Code Playgroud)
我希望输出像
date weight blood_press
1-1-2010 weight1 bp1
1-2-2010 weight2 bp2
1-3-2010 weight3 bp3
Run Code Online (Sandbox Code Playgroud)
不用说,数据比这更大,更复杂.但是这给出了我需要做的事情的想法.再次感谢.
PS由于原因太详细,"join"命令不起作用.
这几乎是个问题.我的意思是,我知道mpi_file_write_all是"集体"版本,但我认为mpi_file_write将会被几个进程同时调用,那么它们的操作实际差异是什么?谢谢.
我启动了合并工具...
> git mergetool
Run Code Online (Sandbox Code Playgroud)
它说了类似的话......
merge tool candidates: blah blah blah
Merging:
file1.c
Run Code Online (Sandbox Code Playgroud)
然后我想,“你知道,我还没准备好。” 不知道有什么干净的方法可以关闭它,我按了 ctrl-C。现在我想检查另一个分支,但我不能......
> git checkout other_branch
error: path 'file1.c' is unmerged
Run Code Online (Sandbox Code Playgroud)
有什么方法可以从中恢复吗?我强调在运行 mergetool 时我没有做任何实际的更改。
在MPI中发送size_t类型号码最安全的方法是什么?举例来说,我相信它是不是安全的,盲目地将它作为MPI_INT.MPI_LONG会一直有效吗?
我的存储库中有两个分支(出于此问题的目的):master
和performance_testing
。我已收到该master
分支机构的更改。我也需要把它们放进去performance_testing
。我需要保持两个分支存在并分开,因此合并是不合适的。我想我可以在一个分支中引入更改并提交,然后在另一分支中执行相同的操作。但这似乎容易出错,我认为git可以通过某种方式更直接地做到这一点。我该怎么做呢?
我必须对我的 repo 应用补丁并且正在运行
git apply --directory=$PWD xxxxx.patch
Run Code Online (Sandbox Code Playgroud)
由于我不会深入的原因,我不能git am
在这个实例中使用,我需要使用目录标志。
git 告诉我:
$> git apply --directory=$PWD xxxxx.patch
code1/xxxxx.patch:337: trailing whitespace.
< one partial line of code >
warning: 1 line adds whitespace errors.
Run Code Online (Sandbox Code Playgroud)
我已经读到空白警告并不严重,不应阻止 git 应用补丁。但是,无论什么原因,git 都没有应用补丁。存储库中的当前文件均未更改。知道该怎么做吗?
客户的代码期望malloc.h
在“通常的可疑”位置之一中找到包含文件。在我的Mac,AFAICT,没有malloc.h
,至少没有在任何地方,你会期望找到它,例如/usr/include
,/usr/local/include
或/opt/local/include
。由于malloc()
通常在 中定义stdlib.h
,并且由于代码无论如何都包含 stdlib.h,因此我能够通过注释掉malloc.h
. 我正在用gcc
.
但有两个问题:我的 gcc 不知何故搞砸了?那个文件应该在那里?此外,代码炸弹几乎立即出现了一个我还无法追踪到的段错误。这可能是使用错误的后果malloc()
吗?