-1

CMakeLists.txt我在Linux上用以下文件结构编写了文件

-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

4

2 回答 2

1

显然,不要使用绝对路径。大多数 CMake 命令都相对于根 CMakeLists.txt 起作用,因此无需定义HOME.

于 2017-02-17T04:25:23.870 回答
1

变量CMAKE_SOURCE_DIR指的是顶级项目目录。使用此变量而不是HOME来引用项目中的目录。

或者,为了能够将子项目构建为独立项目,您可以使用PROJECT_SOURCE_DIR来引用当前项目的目录。请注意,您需要参与project()此类CMakeLists.txt子项目(否则大多数 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}/../../..")
...
于 2017-02-17T07:23:04.267 回答