这是构建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文件。有什么想法吗?
答案 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)