cmake:指定linux内核模块输出构建目录

时间:2018-06-15 14:00:39

标签: cmake kbuild

这是构建linux kernle hello world模块的cmake。

if ( UNIX )
    # Version number
    set ( DRV_MAJOR 1 )
    set ( DRV_MINOR 0 )
    set ( DRV_PATCH 0 )

    set ( DRV_VERSION ${DRV_MAJOR}.${DRV_MINOR}.${DRV_PATCH} )

    configure_file( drv_config.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/drv_config.h )
    execute_process(COMMAND uname -r
                    OUTPUT_VARIABLE os_version
                    OUTPUT_STRIP_TRAILING_WHITESPACE)

    set(module_path /lib/modules/${os_version})
    set(module_build_path ${module_path}/build)

    add_custom_command(OUTPUT drv.ko
                       COMMAND ${CMAKE_MAKE_PROGRAM} -C ${module_build_path} M=${CMAKE_CURRENT_SOURCE_DIR}
                       DEPENDS driver.c Kbuild
                       COMMENT "Building drv.ko"
                      )

    add_custom_target(drv ALL DEPENDS drv.ko)

endif( UNIX )

我的Kbuild:

obj-m += drv.o
drv-objs := driver.o

如何为所有目标文件和相关内容指定输出目录?目前,在源目录位置生成构建内容。我不想混合源文件和obj文件。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

上面的答案对我有所帮助。如果有人对方法感到好奇。

签出并使用gitlab: documentation

最后,cmake文件如下所示:

<Error>
    <Message>
        No HTTP resource was found that matches the request URI 'https://localhost:44327/api/values/3'.
    </Message>
    <MessageDetail>
        No action was found on the controller 'Values' that matches the name '3'.
    </MessageDetail>
</Error>

这与FindKernelHeaders.cmake一起使我可以使用cmake在构建文件夹中构建内核模块。 从来没有打算共享它,但是因为对此问题似乎很感兴趣,所以还是这么做了。

答案 1 :(得分:0)

参考此答案:https://stackoverflow.com/a/37858314,看来解决方案是:

y_var = metric_variable([2 * size], name='y_var')
        copy_op = y_var[size:].assign(y_var[:size])
        with ops.control_dependencies([copy_op]):
            update_ops['y_var'] = state_ops.assign(y_var[:size], y)
相关问题