[CMake] how to detect architecture ?

Konstantin Tokarev annulen at yandex.ru
Fri Jan 19 13:26:48 EST 2018



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