Cross-platform paths in CMake

瘦欲@ 提交于 2019-12-12 11:19:38

问题


I have a project I can build on both Linux and Windows using CMake. The only issue is that Unix-style paths, in CMakeLists.txt, can't work on Windows (which uses backslashes instead of slashes, also requiring the drive letter).

Is there any way I can write a cross-platform CMakeLists.txt?


回答1:


You question affects different details:

  1. Just don't use backslashes. Windows will also process slashes.
  2. Don't use drive letters. Use relative paths everywhere.
  3. GET_FILENAME_COMPONENT(X "${CMAKE_CURRENT_SOURCE_DIR}" REALPATH) can solve the whole path without writing any absolute paths.
  4. Add the tool binary paths into your PATH environment variable. So you do not need to search them by yourself (with absolute paths) or
  5. Use FIND_PROGRAM() to get the tools absolute path without guessing around. You could add hints in which registry entries and paths cmake will search for the tool or
  6. Consider to write your own module for every tool. You can copy the skeleton from any module of the modules folder (have a lock at FindJava.cmake; a very good and portable example on how to search a program).
  7. If all those does not help, you can detect the platform by IF(WIN32) or IF(UNIX).

Hope, this helps...



来源:https://stackoverflow.com/questions/23800659/cross-platform-paths-in-cmake

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!