Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMAKE将变量传递到包含的CMAKE子文件中_C++_Cmake_Cmake Modules - Fatal编程技术网

C++ CMAKE将变量传递到包含的CMAKE子文件中

C++ CMAKE将变量传递到包含的CMAKE子文件中,c++,cmake,cmake-modules,C++,Cmake,Cmake Modules,我目前正在配置项目的构建,并决定将CMakeLists.txt拆分为子文件,这些子文件负责单个构建子任务(如测试、打包、编译等)。问题在于cmake子文件需要关于如何执行任务的信息。所以我决定在包含模块之前需要设置一些变量。看起来像 CpackMylib.cmake: if(NOT DEFINED MYLIB_PACKAGE_NAME) message(FATAL_ERROR "MYLIB_PACKAGE_NAME variable must be set") endif() if(N

我目前正在配置项目的构建,并决定将
CMakeLists.txt
拆分为子文件,这些子文件负责单个构建子任务(如测试、打包、编译等)。问题在于
cmake
子文件需要关于如何执行任务的信息。所以我决定在包含模块之前需要设置一些变量。看起来像

CpackMylib.cmake

if(NOT DEFINED MYLIB_PACKAGE_NAME)
    message(FATAL_ERROR "MYLIB_PACKAGE_NAME variable must be set")
endif()

if(NOT DEFINED MYLIB_VERSION_MAJOR)
    message(FATAL_ERROR "MYLIB_VERSION_MAJOR variable must be set")
endif()

if(NOT DEFINED MYLIB_VERSION_MINOR)
    message(FATAL_ERROR "MYLIB_VERSION_MINOR variable must be set")
endif()

if(NOT DEFINED MYLIB_VERSION_PATCH)
    message(FATAL_ERROR "MYLIB_VERSION_PATCH variable must be set")
endif()

set(CPACK_PACKAGE_VERSION_MAJOR ${MYLIB_VERSION_MAJOR})

set(CPACK_PACKAGE_VERSION_MINOR ${MYLIB_VERSION_MINOR})

set(CPACK_PACKAGE_VERSION_PATCH ${MYLIB_VERSION_PATCH})

set(CPACK_DEBIAN_PACKAGE_NAME "${MYLIB_PACKAGE_NAME}-${MYLIB_VERSION_MAJOR}")

set(CPACK_DEBIAN_PACKAGE_FILE_NAME ${MYLIB_PACKAGE_NAME}-${MYLIB_VERSION_MAJOR})

#other settings...

include(CPack)
根目录
CMakeLists.txt

set(MYLIB_VERSION_MAJOR 0)
set(MYLIB_VERSION_MINOR 0)
set(MYLIB_VERSION_PATCH 1)
set(MYLIB_PACKAGE_NAME ${PROJECT_NAME})
include(cmake/CpackMylib.cmake)
因此,我需要定义特定于项目的变量,这些变量将用于使用
CPack
创建包。我是新来的
CMake
,这样做似乎很自然。但我不确定这是否是处理
CMake
时常用的方法


定义
CMake
子模块所需的所有变量并在根
CMakeLists.txt
中提供它们有意义吗?

为什么
设置版本号而不是在命令中提供版本号?如果您没有
project
命令,那么我建议您添加一个。“定义
CMake
子模块需要的所有变量并在根
CMakeLists.txt
中提供它们是否有意义?”-我不理解这个问题。如果子模块需要这些变量,那么您需要设置它们。但正如前面的评论者所指出的,在CMake中有许多预定义语义的变量,这些变量有时是自动设置的。因此,如果子模块需要顶级项目的一些信息,首先检查这些信息是否由某个具有预定义语义的知名变量提供。为什么
设置
版本号而不是在命令中提供?如果您没有
project
命令,那么我建议您添加一个。“定义
CMake
子模块需要的所有变量并在根
CMakeLists.txt
中提供它们是否有意义?”-我不理解这个问题。如果子模块需要这些变量,那么您需要设置它们。但正如前面的评论者所指出的,在CMake中有许多预定义语义的变量,这些变量有时是自动设置的。因此,如果子模块需要来自顶层项目的一些信息,首先检查这些信息是否由某个具有预定义语义的已知变量提供。