CMake Platform Dependent Issues

From KitwarePublic
Jump to: navigation, search

See also CMake Generator Specific Information

Specific Platforms

Linux

Mac OSX

Windows

OS Specific Programs

Platform System Info OS Distribution Version
Linux uname -a
HP-UX uname -a
AIX uname -a
SunOS uname -a
IRIX hinv, uname -a
Max OSX / Darwin system_profiler, uname -a About This Mac, /usr/bin/sw_ver
Cygwin uname -a
Windows ver ver


The Platforms / Compilers Table

Platform Compilers Macros List Dependencies List Symbols Trace Syscal/Signal Runtime Library Path
Linux gcc, g++, icc __linux ldd program nm strace LD_LIBRARY_PATH
HP-UX cc, aCC __hpux chatr program nm SHLIB_PATH (32), LD_LIBRARY_PATH (64)
AIX xlc, xlC _AIX dump -H program nm LIBPATH
SunOS cc, CC __sparc ldd program nm LD_LIBRARY_PATH (32), LD_LIBRARY_PATH_64 (64)
IRIX cc, CC __sgi ldd program LD_LIBRARY_PATH (o32), LD_LIBRARYN32_PATH (n32), LD_LIBRARY64_PATH (64)
Max OSX / Darwin gcc, g++ __APPLE__ otool -L program nm ktrace -f outfile program; kdump outfile DYLD_LIBRARY_PATH
Cygwin gcc, g++ __CYGWIN__ depends program.exe nm PATH
gcc, g++ w/ -mwin32 __CYGWIN__, _WIN32
gcc, g++ w/ -mno-cygwin _WIN32
MinGW gcc, g++ __MINGW32__ depends program.exe nm PATH
Windows Visual Studio 6, cl _WIN32 depends program.exe dumpbin PATH
Visual Studio 7, cl depends program.exe
Visual Studio 7.1, cl depends program.exe

This is a useful reference for predefined macros: http://predef.sourceforge.net/precomp.html

Architecture Modes

Compiler Command Languages Architecture Flags Macros
GNU gcc C __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
g++ C++
SGI MIPSpro cc C -o32, -n32, -64 _COMPILER_VERSION, _MIPS_SIM==_ABIO32 (o32), _MIPS_SIM==_ABIN32 (n32), _MIPS_SIM==_ABI64 (64)
CC C++
SunPro cc C -xarch=... __SUNPRO_C #include <sys/isa_defs.h>: _ILP32 (32), _LP64 (64)
CC C++ __SUNPRO_CC
HP cc C +DD64 __LP64__ (64)
aCC C++ __HP_aCC
IBM VisualAge xlc C -q32, -q64 __IBMC__
xlC C++ __IBMCPP__

Compiler Options and Flags

Compiler Full Warnings No Warnings Warnings as Errors Suppress Warning #n Warning #n as Error
gcc -W -Wall -Wshadow -w -Werror -Wno-<warning-name>
MIPS Pro -fullwarn -w or -woffall or -woff all -w2 -woff (#n)[,n0..n1,...] or -diag_suppress (#n)[,n0..n1,...] -diag_error (#n)[,n0..n1,...]
icc -Wall -w2 -Wcheck -w -Werror -wd(#n)[,arg2,..argn] -we(#n)[,arg2,..argn]
bcc32 -w+ -w- -g1 -w-(#n)
xlc -qlanglv=ansi or -qflag=w:w -w or -qflag=e:e -qhalt=w -qsuppress=(#n)[:arg2:..argn]
xlC -qlanglv=ansi or -qflag=w:w -w or -qflag=e:e -qhalt=w -qsuppress=(#n)[:arg2:..argn] -qhaltonmsg=(#n)[,arg2,..argn]
VS6: cl /W4 /w /WX
VS7-8: cl /Wall /Wp64 /w /WX /wd(#n) /we(#n)
Sun cc -w -errwarn=%all -erroff=<warning-tag>[,arg2,..argn] -errwarn=<warning-tag>[,arg2,..argn] (use -errtags=yes to see tags)
HP cc +w1 -w or +w3 +We +W (#n)[,arg2,..argn] +We (#n)[,arg2,..argn]
HP aCC +w -w +We +W(#n)[,arg2,..argn] +We(#n)[,arg2,..argn]
wcl386 -wx -w=0 -we -wcd=(#n) -wce=(#n)
  • More platform specific information can be found in ROSETTA STONE platforms table (Mostly for system administrators)

Debugging Tips

Using special debug libraries on various systems

Platform Operation
Debian GNU/Linux export LD_LIBRARY_PATH=/usr/lib/debug
Mac OS X export DYLD_IMAGE_SUFFIX=_debug

The gdbrun Script for UNIX-like Platforms

The following is an extremely useful script that will run any command line in a gdb debugger. Put this text in an executable file called "gdbrun":

#!/bin/bash

extra_text=""
if [ "$1" == "--break-main" ]; then
  extra_text="break main"
  shift
fi

EXEC="$1"

shift

run_text="run"
for a in "$@"; do
  run_text="${run_text} \"$a\""
done

TMPFILE=/tmp/gdbrun.$$.$#.tmp
cat > ${TMPFILE} <<EOF
${extra_text}
${run_text}
EOF

gdb -x ${TMPFILE} "${EXEC}"
rm -f "${TMPFILE}"

Then one may debug a test like this:

gdbrun /path/to/myexe --some-arg --some-other-arg

Notes about this script:

  • It supports spaces in argument names (note the for loop)
  • Takes extra argument --break-main, which causes the program to stop once all the libraries are loaded
  • It always run debugger, even when program exits normally
  • Cannot be used with MPI or any other system that runs your program from a shell script



CMake: [Welcome | Site Map]