CMake Platform Dependent Issues: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
No edit summary
(Replace content with link to new CMake community wiki)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
See also [[CMake Generator Specific Information]]
{{CMake/Template/Moved}}


== Specific Platforms==
This page has moved [https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Platform-Dependent-Issues here].
 
=== Linux ===
* [[CMake IA64 Issues|IA64 Issues]]
 
=== Mac OSX ===
* [[CMake:Bundles And Frameworks|Bundles and Frameworks]]
* [[CMake:MacOSXLinkerAndXCodeStuff|Linker and XCode stuff]]
* [[CMake:HowToUseExistingOSXFrameworks|How To Use Existing OS X Frameworks]]
* http://www.kernelthread.com/mac/apme/optimizations/
* http://0xfe.blogspot.com/2006/03/how-os-x-executes-applications.html
 
=== Windows ===
* [[CMake Borland Compiler Issues|Borland Compiler Issues]]
 
* [[CMake MinGW Compiler Issues|MinGW Compiler Issues]]
 
* [[CMake Watcom Compiler Issues|Wacom Compiler Issues]]
 
== OS Specific Programs ==
 
{| border="1"
|- bgcolor="#abcdef"
! 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 ||
|-
|rowspan=3| Windows || ver || ver
|}
 
 
== The Platforms / Compilers Table ==
 
{| border="1"
|- bgcolor="#abcdef"
! 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, [http://docs.hp.com/en/B3901-90019/index.html 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
|-
|rowspan=3| Cygwin || gcc, g++ || __CYGWIN__ || rowspan=3|depends program.exe || rowspan=3| nm || rowspan=3|  || rowspan=3|PATH
|-
|gcc, g++ w/ -mwin32 || __CYGWIN__, _WIN32
|-
|gcc, g++ w/ -mno-cygwin || _WIN32
|-
| MinGW || gcc, g++ || __MINGW32__ || depends program.exe || nm ||  || PATH
|-
|rowspan=3| Windows || Visual Studio 6, cl ||rowspan=3| _WIN32 || depends program.exe ||rowspan=3| dumpbin ||rowspan=3| ||rowspan=3| PATH
|-
|Visual Studio 7, cl || depends program.exe '''†'''
|-
|Visual Studio 7.1, cl || depends program.exe '''†'''
|}
 
* '''†''' In order for ''depends'' to be installed, the "Win32 Platform SDK Tool" needs to be selected when installing Visual Studio (See [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vccondeterminingwhichdllstoredistribute.asp Determining Which DLLs to Redistribute]).
 
This is a useful reference for predefined macros: http://predef.sourceforge.net/precomp.html
 
==Architecture Modes==
 
{| border="1"
|- bgcolor="#abcdef"
! Compiler !! Command !! Languages !! Architecture Flags !!colspan=2| Macros
|-
|rowspan=2| GNU || gcc || C || || ||rowspan=2| __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
|-
| g++ || C++ || ||
|-
|rowspan=2| SGI MIPSpro || cc || C ||rowspan=2| -o32, -n32, -64 || ||rowspan=2| _COMPILER_VERSION, _MIPS_SIM==_ABIO32 (o32), _MIPS_SIM==_ABIN32 (n32), _MIPS_SIM==_ABI64 (64)
|-
| CC || C++ ||
|-
|rowspan=2| SunPro || cc || C ||rowspan=2| -xarch=... || __SUNPRO_C ||rowspan=2| #include <sys/isa_defs.h>: _ILP32 (32), _LP64 (64)
|-
| CC || C++ || __SUNPRO_CC
|-
|rowspan=2| HP || cc || C ||rowspan=2| +DD64 || ||rowspan=2| __LP64__ (64)
|-
| aCC || C++ || __HP_aCC
|-
|rowspan=2| IBM VisualAge || xlc || C ||rowspan=2| -q32, -q64 || __IBMC__ ||
|-
| xlC || C++ || __IBMCPP__ ||
|}
 
==Compiler Options and Flags==
 
{| border="1"
|- bgcolor="#abcdef"
! 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 [http://bhami.com/rosetta.html ROSETTA STONE] platforms table (Mostly for system administrators)
 
* Another even more complete table: [http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html Using static and shared libraries across platforms] (For various compiler flags and options)
 
== Debugging Tips ==
 
=== Using special debug libraries on various systems===
{| border="1"
|- bgcolor="#abcdef"
! 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":
 
<pre><nowiki>
#!/bin/sh
 
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}"
 
</nowiki></pre>
 
Then one may debug a test like this:
 
<pre><nowiki>
gdbrun /path/to/myexe --some-arg --some-other-arg
</nowiki></pre>
 
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/Template/Footer}}

Latest revision as of 15:41, 30 April 2018


The CMake community Wiki has moved to the Kitware GitLab Instance.

This page has moved here.