[CMake] Re: Find* and cross compiling
Rodolfo Schulz de Lima
rodolfo at rodsoft.org
Sat Dec 29 11:18:41 EST 2007
> By setting the mode to ONLY cmake will look ONLY in the directories with
> the
> CMAKE_FIND_ROOT_PATH prefix.
Yes, I do this. The problem is that those scripts hardwire some default
paths to the native places where headers and libraries are found. When we
cross-compile, those defaults should be changed. If the scripts didn't
hardwire those default paths, they'd use the correct defaults set up by
CMake.
For instance, look at what FindOpenAL does:
FIND_PATH(OPENAL_INCLUDE_DIR al.h
PATHS
$ENV{OPENALDIR}
NO_DEFAULT_PATH
PATH_SUFFIXES include/AL include/OpenAL include
)
FIND_PATH(OPENAL_INCLUDE_DIR al.h
PATHS ${CMAKE_PREFIX_PATH} # Unofficial: We are proposing this.
NO_DEFAULT_PATH
PATH_SUFFIXES include/AL include/OpenAL include
)
FIND_PATH(OPENAL_INCLUDE_DIR al.h
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\
Development\ Kit\\1.00.0000;InstallDir]
PATH_SUFFIXES include include/lua51 include/lua5.1 include/lua
)
This could be changed to
FIND_PATH(OPENAL_INCLUDE_DIR al.h
PATHS
$ENV{OPENALDIR}
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\
Development\ Kit\\1.00.0000;InstallDir]
PATH_SUFFIXES include/AL include/OpenAL include)
By not using NO_DEFAULT_PATH, FIND_PATH relies on the correctly default
search locations set up by cmake. I'm don't know about Mac frameworks and
stuff, but cross-compilation should always be in mind when writing those
scripts.
Other native locations (as /sw, /opt/local, /opt/csw) should only be
searched if not cross-compiling.
Regards,
rod
More information about the CMake
mailing list