CMake如何检查构建目标

新手上路,请多包涵

我试图找到解决方案:如何检查构建目标?

考虑以下 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})

然后我调用以下命令:

 /home/username/Software/clion-2017.1.1/bin/cmake/bin/cmake --build /home/username/Projects/cppTests/cmake-build-debug --target cppTests -- -j 8

如何在 –target 选项之后检查 CMake 脚本中的目标 cppTests ?我在 Makefiles 中寻找类似 MAKECMDGOALS 的东西。我找到了任何有用的解决方案…

原文由 Denis Kotov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 840
2 个回答

我找到了一个解决方案:

 add_custom_command(
        OUTPUT fidl_files_generated
        DEPENDS "./interfaces/*.fidl"
        COMMAND touch fidl_files_generated
        COMMAND /home/redra/Projects/Automotive/cgen/commonapi-generator/commonapi-generator-linux-x86_64 -sk ../interfaces/ *.fidl
        COMMAND /home/redra/Projects/Automotive/cgen/commonapi_dbus_generator/commonapi-dbus-generator-linux-x86_64 ../interfaces/ *.fidl
)

add_custom_target(fidl_gen
                  DEPENDS fidl_files_generated)

set(GENERATED_FILES "../cmake-build-debug/src-gen/v1/commonapi/HelloWorldDBusProxy.cpp"
                    "../cmake-build-debug/src-gen/v1/commonapi/HelloWorldDBusDeployment.cpp"
                    "../cmake-build-debug/src-gen/v1/commonapi/HelloWorldDBusStubAdapter.cpp"
                    "../cmake-build-debug/src-gen/v1/commonapi/HelloWorldStubDefault.cpp"
                    "../cmake-build-debug/src-gen/v1/commonapi/HelloWorldDBusDeployment.cpp")
set_source_files_properties(${GENERATED_FILES} PROPERTIES GENERATED TRUE)

add_executable(
        CommonAPI_Server
        ${SOURCE_FILES}
        ${GENERATED_FILES})
add_dependencies(CommonAPI_Server fidl_gen)

谢谢大家的支持!!

特别感谢 Angew 的支持和帮助!!!!

原文由 Denis Kotov 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

原文由 Craig Scott 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题