【问题标题】:How can I include a dependency file generated by a custom command in cmake for GNU make?如何在 GNU make 的 cmake 中包含由自定义命令生成的依赖文件?
【发布时间】:2020-07-23 04:58:20
【问题描述】:

我在基于 CMake 的构建环境中集成了一个从文本文件生成一些代码的工具。

这个工具还能够生成 GNU make 格式的依赖文件(很像 gcc -MD 为 c 文件做的)。

我想将此依赖文件包含在 CMake 生成的 makefile 中,以便在必要时正确重建。不幸的是,我找不到正确的方法。

我试过了:

有人遇到过类似的问题吗?

【问题讨论】:

    标签: cmake gnu-make


    【解决方案1】:

    尝试将您的文件定义为 add_custom_target 的依赖项:

    cmake_minimum_required(VERSION 3.0)
    project(Custom_Command_TEST)
    add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/your_gen_file.txt"
                       COMMAND /bin/date > "${CMAKE_BINARY_DIR}/your_gen_file.txt"
                       COMMAND /bin/echo "RUNNING COMMAND")
    
    add_custom_target(GenerateFile
                      /bin/echo "RUNNING TARGET"
                      DEPENDS "${CMAKE_BINARY_DIR}/your_gen_file.txt")
    
    add_executable(${PROJECT_NAME} main.cpp)
    add_dependencies(${PROJECT_NAME} GenerateFile)
    

    只会重建target GenerateFile。您可以将.txt 生成步骤作为COMMAND 放入add_custom_command

    第一次制作的输出:

    [ 33%] Generating your_gen_file.txt
    RUNNING COMMAND
    RUNNING TARGET
    [ 33%] Built target GenerateFile
    [ 66%] Building CXX object CMakeFiles/Custom_Command_TEST.dir/main.cpp.o
    [100%] Linking CXX executable Custom_Command_TEST
    [100%] Built target Custom_Command_TEST
    

    输出第二个make:

    RUNNING TARGET
    [ 33%] Built target GenerateFile
    [100%] Built target Custom_Command_TEST
    

    如果您想再次重建所有内容,您需要make clean

    您也可以查看older post

    【讨论】:

    • 在这种情况下,我会每次都重新构建,而不管指示依赖关系的文件内容如何
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2012-08-11
    • 2011-07-10
    • 1970-01-01
    • 2018-08-27
    • 2021-12-11
    • 2017-01-15
    相关资源
    最近更新 更多