CMake 如何检查构建目标

Den*_*tov 4 c++ build cmake build-system

我试图找到解决方案:How to check target for build ?

考虑以下 CMake 脚本:

cmake_minimum_required(VERSION 3.5.1)
project(cppTests)

# How to check at this point the target of build
if(TARGET "cppTests")
    message(STATUS "Target is cppTests")
else()
    message(STATUS "Target is not cppTests")
endif()


message(STATUS "Target is ${TARGET}")
set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(cppTests ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)

然后我调用以下内容:

/home/username/Software/clion-2017.1.1/bin/cmake/bin/cmake --build /home/username/Projects/cppTests/cmake-build-debug --target cppTests -- -j 8
Run Code Online (Sandbox Code Playgroud)

如何在--target选项之后检查CMake脚本中的目标cppTests我正在Makefiles中寻找类似MAKECMDGOALS 的内容。我找到了任何有用的解决方案...

Cra*_*ott 5

在CMake 生成项目文件后,开发人员选择要构建的目标。当 CMake 运行时,CMake 无法知道开发人员将构建什么目标。因此,您所要求的对于 CMake 项目来说并没有真正意义。在 Makefile 中,没有单独的配置步骤,它是构建的一部分,这就是它如何提供像 MAKECMDGOALS 这样的功能。如果您真的想要 Makefiles 的此功能,那么也可能值得重新考虑,因为它不适用于典型用途(强调我的):

Make 会将特殊变量 MAKECMDGOALS 设置为您在命令行上指定的目标列表。如果命令行上没有给出目标,则此变量为空。请注意,该变量仅应在特殊情况下使用。

在您的示例中,您也滥用了if(TARGET...). 该构造用于测试项目是否已定义特定的 CMake 目标(在您的示例中,直到if()命令之后才定义,因此它始终评估为 false)。有关详细信息,请参阅此处的文档。