"-check none" generates error

"-check none" generates error

If I use the compiler option -check none, I get the following error

ifort: error #10236: File not found: 'none'

When I remove the option, all compiles fine.

This happens on our remote server. If I compile locally, then the option -check none works fine.

Any ideas on how I can remedy this?

13 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Hello,

which OS and version are you using; 64 or 32 bit?
It's possible that the handling of options by our compiler is not working for your (server) configuration. Hence I'd like to ask you to provide the whole command line options to see which combination causes incorrect interpretation.
Have you tried "-nocheck" (alias to "-check none") as workaround?

Best regards,

Georg Zitzlsberger

Which compiler version is on the server? Please show us the result of ifort -V.

Steve - Intel Developer Support

Intel Fortran Intel 64 Compiler XE for applications running on Intel 64, Version 12.1.0.233 Build 20110811

Linux version 2.6.18-128.1.6.el5.Bull.7 (kx86@atlas.frec.bull.fr) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Wed Feb 23 14:47:42 CET 2011

The -nocheck is not a good workaround for me, because I use an automatically generated makefile.

For the other infos, see my answer to Steve Lionel.

Hello,

after testing with the same compiler version option "-check none" is accepted correctly. Hence it's less likely a compiler problem (still cannot exclude, though).
You said you automatically generate the Makefile; maybe the creation of compiler options is not as expected.
I'd more eagerly ask you for the exact compiler invocation including options.
If you use GNU make you can simply remove the "@" right before to the compiler invocation to print the whole command line before execution (the easiest way to get it).

It's OK to shorten/scramble file names but please don't remove quotes/escape sequences as this might have impact on how the command line is parsed.

Thank you & best regards,

Georg Zitzlsberger

I think I narrowed down the issue. I was completely off track. I should have posted the complete ifort command. The makefile has this command:

ifort -O3 -I$(MKL_INC_DIR) -c -o "$@" "$<"

It seems that $(MKL_INC_DIR) is not expanded on the server - although it does work on other servers. I am aware this is not a Fortran issue, but since we are at it, maybe you know a solution. If I change the makefile to

ifort -O3 -I$MKL_INC_DIR -c -o "$@" "$<"

then the command executed is ifort -O3 -IKL_INC_DIR -c -o
That is, the $M is swallowed, so I get again an error.

Any quick ideas?

Hi Georg,

we were writing at the same time - it looks like you are right.

I am attaching the two most important parts of the automatically generated makefiles.

I am aware this might not be a Fortran issue, but I would greatly appreciate comments.

Thanks

Daniel

Attachments: 

AttachmentSize
Download subdir.mk3.16 KB
Download makefile.1.03 KB

Hello Daniel,

the Makefiles look OK. As you already said, once $(MKL_INC_DIR) is empty there are problems because the compiler will see something like:

ifort -O3 -I -c -o...

Regarding your question: Yes, you have to use $(MKL_INC_DIR) or ${MKL_INC_DIR} and not $MKL_INC_DIR. GNU make requires variable expansions (except for automatic variables like $@ or $<) to enclose the name in parenthesis or braces.

Also, I suppose $(MKL_INC_DIR) is a hard requirement for your builds, isn't it? If it can be omitted you might pull out "-I$(MKL_INC_DIR)" to a dedicated test so you don't risk an empty "-I" option.

The overall question is: What's the effective command line after GNU make did the expansions and substitutions. Debugging is quite tedious here but recording the effective command line and comparing it across different systems can help and is a good test as well.

Best regards,

Georg Zitzlsberger

[edit: erroneously mixed -L & -I]

Hi Georg,

thanks for your quick answers.

I have 3 test machines: 1 local and 2 remote servers. On the local and one server, the makefile works fine. On the last (the important one) it doesnt. On all machines, shell is bash, make is GNU Make 3.81, Ifort is the same, lastest version.

On the problematic machine, it seems that neither $(MKL_INC_DIR) nor ${MKL_INC_DIR} are expanded, the effective command line that is printed to the shell is an empty -l (it's an include not a link option). If I change the makefile to the incorrect
ifort -I$MKL_INC_DIR

then the output is
ifort -I KL_INC_DIR

Any ideas? I am willing to search myself, but I have no clue where to start....

Best

Daniel

Is MKL_INC_DIR defined? Have you properly done the "source" of the compilervars.sh file in the build environment?

Steve - Intel Developer Support
Best Reply

Hello,

in addition to Steve's reply:
Somewhere in your Makefiles you try to set $(MKL_INC_DIR) which obviously fails... or is missing. Can you find the location were you do this?
Also: If you source the compilervars.sh script correctly your environment will be set up in a way that you usually don't need to specify MKL, TBB & IPP include directories; it sets $CPATH, $FPATH & $INCLUDE that the compiler will transparently use. E.g.:

$ source /opt/intel/bin/compilervars.sh intel64
$ ifort foo.f90 -o foo

Best regards,

Georg Zitzlsberger

Steve, Georg,

you were right on the spot. Not sure the compilervars.sh script is sourced on the servers, but they do define most Fortran related variables when you load the Intel module. However, I had forgotten to export my own MKL_INC_DIR. So
export MKL_INC_DIR

was needed so that make could use the variable. Strangely, this was not necessary on the other server (where I also had to define the variable myself), but nevermind.

Thanks so much guys, you're the best!

Daniel

Leave a Comment

Please sign in to add a comment. Not a member? Join today