cmake:如何写CMakeLists.txt,方便Linux程序移植到Windows?
cmake: How to write CMakeLists.txt in order to facilitate the transplant on Linux programs to Windows?
我在Linux
上写了具有以下文件结构的CMakeLists.txt
文件
-main
--include
--bin
--lib
----SRC
------CMakeLists.txt
------dir1
--------CMakeLists.txt
------dir2
--------CMakeLists.txt
dir1/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
set(HOME "/workspace/main")
set(INCLUDE "${HOME}/include")
set(LIB "${HOME}/lib")
set(LIBRARY_OUTPUT_PATH "${HOME}/lib")
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_C_FLAGS_DEBUG "xxx")
set(CMAKE_CXX_FLAGS_DEBUG "xxx")
include_directories(${INCLUDE} ${INCLUDE}/AR ${INCLUDE}/linux-x86_64)
add_library(video STATIC video.c video2.c)
dir2
目录CMakeLists.txt相似内容
SRC/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
add_subdirectory(dir1)
add_subdirectory(dir2)
我的问题是:如何写CMakeLists.txt
方便Linux
程序移植到Windows
?
显然不要使用绝对路径。大多数 CMake 命令相对于 root CMakeLists.txt 工作,因此不需要定义 HOME
.
变量CMAKE_SOURCE_DIR指的是顶级项目目录。使用此变量而不是 HOME 来引用项目中的目录。
或者,为了能够将子项目构建为独立项目,您可以使用 PROJECT_SOURCE_DIR 来引用当前项目的 目录 。请注意,对于此类子项目,您需要在 CMakeLists.txt
中包含 project()
(否则大多数 CMake 命令将不起作用)。
lib/SRC/dir1/CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(dir1)
set(HOME "${PROJECT_SOURCE_DIR}/../../..")
...
此外,还有一个变量 CMAKE_CURRENT_SOURCE_DIR,它总是引用 当前源目录(CMakeLists.txt
被执行)。
lib/SRC/dir1/CMakeLists.txt:
...
set(HOME "${CMAKE_CURRENT_SOURCE_DIR}/../../..")
...
我在Linux
上写了具有以下文件结构的CMakeLists.txt
文件
-main
--include
--bin
--lib
----SRC
------CMakeLists.txt
------dir1
--------CMakeLists.txt
------dir2
--------CMakeLists.txt
dir1/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
set(HOME "/workspace/main")
set(INCLUDE "${HOME}/include")
set(LIB "${HOME}/lib")
set(LIBRARY_OUTPUT_PATH "${HOME}/lib")
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_C_FLAGS_DEBUG "xxx")
set(CMAKE_CXX_FLAGS_DEBUG "xxx")
include_directories(${INCLUDE} ${INCLUDE}/AR ${INCLUDE}/linux-x86_64)
add_library(video STATIC video.c video2.c)
dir2
目录CMakeLists.txt相似内容
SRC/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
add_subdirectory(dir1)
add_subdirectory(dir2)
我的问题是:如何写CMakeLists.txt
方便Linux
程序移植到Windows
?
显然不要使用绝对路径。大多数 CMake 命令相对于 root CMakeLists.txt 工作,因此不需要定义 HOME
.
变量CMAKE_SOURCE_DIR指的是顶级项目目录。使用此变量而不是 HOME 来引用项目中的目录。
或者,为了能够将子项目构建为独立项目,您可以使用 PROJECT_SOURCE_DIR 来引用当前项目的 目录 。请注意,对于此类子项目,您需要在 CMakeLists.txt
中包含 project()
(否则大多数 CMake 命令将不起作用)。
lib/SRC/dir1/CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(dir1)
set(HOME "${PROJECT_SOURCE_DIR}/../../..")
...
此外,还有一个变量 CMAKE_CURRENT_SOURCE_DIR,它总是引用 当前源目录(CMakeLists.txt
被执行)。
lib/SRC/dir1/CMakeLists.txt:
...
set(HOME "${CMAKE_CURRENT_SOURCE_DIR}/../../..")
...