[CMake] how to detect architecture ?

Franck Houssen franck.houssen at inria.fr
Sat Jan 20 06:20:38 EST 2018


Got it, thanks.
I'll do that even if Windows is not an OS I target (I guess tests will not run on Windows - run bash script like ./test.sh in which I redirect outputs with > and other stuffs the unix way).

----- Mail original -----
> De: "Konstantin Tokarev" <annulen at yandex.ru>
> À: "Chuck Atkins" <chuck.atkins at kitware.com>, "Franck Houssen" <franck.houssen at inria.fr>
> Cc: "CMake Mail List" <cmake at cmake.org>
> Envoyé: Vendredi 19 Janvier 2018 19:26:48
> Objet: Re: [CMake] how to detect architecture ?
> 
> 
> 
> 19.01.2018, 21:22, "Chuck Atkins" <chuck.atkins at kitware.com>:
> > Hi Franck,
> >
> > I'd suggest going a little more robust by using both
> > CMAKE_SHARED_LIBRARY_PREFIX and CMAKE_SHARED_LIBRARY_SUFFIX to generate a
> > function at configure time to resolve the correct filename.
> >
> > For example, util.h.in:
> >
> > #ifndef _UTIL_H_
> > #define _UTIL_H_
> >
> > #include <stdio.h>
> >
> > static inline
> > void get_library_filename(char* filename, const char* libname)
> > {
> >   sprintf(filename,
> >   "@CMAKE_SHARED_LIBRARY_PREFIX@%s at CMAKE_SHARED_LIBRARY_SUFFIX@",
> >   libname);
> > }
> >
> > #endif /* _UTIL_H_ */
> >
> > Then your CMakeLists.txt:
> >
> > configure_file(
> >   ${CMAKE_CURRENT_SOURCE_DIR}/util.h.in
> >   ${CMAKE_CURRENT_BINARY_DIR}/util.h
> >   @ONLY
> > )
> > add_executable(foo main.c ${CMAKE_CURRENT_BINARY_DIR}/util.h)
> > target_include_directories(foo PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
> >
> > And finally main.c:
> >
> > #include <stdio.h>
> > #include <util.h>
> >
> > int main(int argc, char **argv)
> > {
> >   char filename[256];
> >
> >   get_library_filename(filename, "foo");
> >
> >   printf("Library foo uses file %s\n", filename);
> >
> >   return 0;
> > }
> >
> > This will give you "libfoo.so" on Linux, "libfoo.dylib" on Apple, and
> > "foo.dll" on Windows.
> 
> Note that Windows DLLs may also happen to have to lib prefix (e.g. CMake adds
> them
> by default when building projects with MinGW).
> 
> >
> > ----------
> > Chuck Atkins
> > Staff R&D Engineer, Scientific Computing
> > Kitware, Inc.
> >
> > On Tue, Jan 9, 2018 at 10:04 AM, Franck Houssen <franck.houssen at inria.fr>
> > wrote:
> >> Thanks !
> >>
> >> ----- Mail original -----
> >>> De: "Konstantin Tokarev" <annulen at yandex.ru>
> >>> À: "Franck Houssen" <franck.houssen at inria.fr>, "CMake Mail List"
> >>> <cmake at cmake.org>
> >>> Envoyé: Mardi 9 Janvier 2018 16:00:55
> >>> Objet: Re: [CMake] how to detect architecture ?
> >>>
> >>>
> >>>
> >>> 09.01.2018, 17:58, "Franck Houssen" <franck.houssen at inria.fr>:
> >>> > Is there a way to detect architecture ?
> >>> >
> >>> > Seems there is nothing simple since these old threads :
> >>> > https://stackoverflow.com/questions/11944060/how-to-detect-target-architecture-using-cmake/12024211#12024211
> >>> > https://stackoverflow.com/questions/16796629/cmake-create-architecture-aware-makefile
> >>> >
> >>> > Is there a solution now ?
> >>> >
> >>> > My need is quite simple: I have an executable who needs dlopen. To test
> >>> > it,
> >>> > I planned to write a bash script that would have done "./exe
> >>> > /path/to/lib.so" on linux (debian, ...) OR "./exe /path/to/lib.dylib"
> >>> > on
> >>> > osx. To replace correctly so/dylib in the bash script I need to know
> >>> > the
> >>> > architecture. Any idea how to do this ?
> >>>
> >>> ${CMAKE_SHARED_LIBRARY_SUFFIX}
> >>>
> >>
> >> Oh man ! Didn't know this one : exactly what I was looking for
> >>
> >>> > Franck
> >>> > ,--
> >>> >
> >>> > Powered by www.kitware.com
> >>> >
> >>> > Please keep messages on-topic and check the CMake FAQ at:
> >>> > http://www.cmake.org/Wiki/CMake_FAQ
> >>> >
> >>> > Kitware offers various services to support the CMake community. For
> >>> > more
> >>> > information on each offering, please visit:
> >>> >
> >>> > CMake Support: http://cmake.org/cmake/help/support.html
> >>> > CMake Consulting: http://cmake.org/cmake/help/consulting.html
> >>> > CMake Training Courses: http://cmake.org/cmake/help/training.html
> >>> >
> >>> > Visit other Kitware open-source projects at
> >>> > http://www.kitware.com/opensource/opensource.html
> >>> >
> >>> > Follow this link to subscribe/unsubscribe:
> >>> > https://cmake.org/mailman/listinfo/cmake
> >>>
> >>>
> >>> --
> >>> Regards,
> >>> Konstantin
> >>>
> >> --
> >>
> >> Powered by www.kitware.com
> >>
> >> Please keep messages on-topic and check the CMake FAQ at:
> >> http://www.cmake.org/Wiki/CMake_FAQ
> >>
> >> Kitware offers various services to support the CMake community. For more
> >> information on each offering, please visit:
> >>
> >> CMake Support: http://cmake.org/cmake/help/support.html
> >> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> >> CMake Training Courses: http://cmake.org/cmake/help/training.html
> >>
> >> Visit other Kitware open-source projects at
> >> http://www.kitware.com/opensource/opensource.html
> >>
> >> Follow this link to subscribe/unsubscribe:
> >> https://cmake.org/mailman/listinfo/cmake
> 
> 
> --
> Regards,
> Konstantin
> 


More information about the CMake mailing list