Reputation: 2764
CMake's global property, FIND_LIBRARY_USE_LIB64_PATHS
, has the following documentation:
FIND_LIBRARY_USE_LIB64_PATHS
is a boolean specifying whether theFIND_LIBRARY
command should automatically search thelib64
variant of directories called lib in the search path when building 64-bit binaries.
Reading "when building 64-bit binaries" implies CMake somehow knows my target architecture, and automatically toggles the behavior on/off depending. Am I just reading too far into this, or does CMake have a higher-level abstraction for dealing with 32-bit/64-bit compilation?
If there is, how do I configure whatever mechanism is used by FIND_LIBRARY_USE_LIB64_PATHS
, to force a 32-bit/64-bit compiliation?
I realize there are existing questions dealing with forcing 32-bit/64-bit, but they deal with CMAKE_C_FLAGS
and the like. If CMake has a higher level abstraction, I'd prefer it to messing with CFLAGS
.
Upvotes: 3
Views: 1181
Reputation: 3335
tl;dr; CMake does not have a general mechanism for forcing 32- or 64-bit compilation. You do that with selection of compilers or compilation switches.
But CMake can actually find out if the compilation is for 64- or 32-bit (or probably many other word lengths too) target. As described in this answer and the CMake docs you should use:
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
message (STATUS "Compiling for 64-bit")
endif()
That is probably the underlying mechanism for "when building 64-bit binaries". But there are no variables explicitly for this.
NOTE that the variable CMAKE_SIZEOF_VOID_P
is cached so that if you alter compiler options, say CMAKE_C_FLAGS
to use '-m32' for a 32-bit compile it won't affect CMAKE_SIZEOF_VOID_P
unless you clean your build directory.
So, in a way there seems to be a somewhat general mechanism for 32/64-bit handling. It is used in some situations, but to use it more extensively you have to handle that in your CMakeLists, which is not great.
Upvotes: 3