[CMake] What is the proper cross-platform way to link the Python library?
Rolf Eike Beer
eike at sf-mail.de
Sun Jan 6 05:08:37 EST 2013
Alan W. Irwin wrote:
> On several different build systems I am maintaining,
> target_link_libraries (or its swig equivalent) is used in the
> following way to link in the
> Python library.
>
> target_link_libraries(<python target> ${PYTHON_LIBRARIES})
>
> where PYTHON_LIBRARIES has been set by using the FindPythonLibs find
> module. This approach works well on Unix with the "Unix Makefiles"
> generator and also on Windows with the "MSYS Makefiles" generator,
>
> But Arjen tells me this general approach fails when using the MSVC
> compiler
> and the "NMake Makefiles" generator _and_ if he sets
> CMAKE_BUILD_TYPE:STRING=Debug.
[...]
> So I am thinking of replacing the above target_link_libraries code
> by the following:
>
> if(NOT PYTHON_DEBUG_LIBRARIES)
> # Required for platforms like Linux that don't set
> PYTHON_DEBUG_LIBRARIES
> set(PYTHON_DEBUG_LIBRARIES ${PYTHON_LIBRARIES})
> endif(NOT PYTHON_DEBUG_LIBRARIES)
>
> target_link_libraries(<python target>
> general ${PYTHON_LIBRARIES}
> optimized ${PYTHON_LIBRARIES}
> debug ${PYTHON_DEBUG_LIBRARIES}
> )
>
> Is this the correct general cross-platform approach that should be
> used for linking the python library (at least until FindPythonLibs
> returns a more user-friendly PYTHON_LIBRARIES result) or is there a
> better alternative? I ask this question because the
This will work as long as PYTHON_LIBRARIES contains only one element.
The debug/optimized keywords apply only to the immediately following
library, so if you have a list of libraries returned (currently unlikely
AFAIK) it may still cause bad results.
Have a look at the SelectLibraryConfigurations module, it does what you
did above and in 2.8.10.* also properly handles lists and the case where
both values are the same.
And from what I see (at least in the current code) FindPythonLibs
already does exaclty that. So which CMake version is Arjen using? And if
it is the most recent one, can you get him to debug why FindPythonLibs
doesn't work as expected?
Eike
More information about the CMake
mailing list