通过仅与CMake链接来创建可执行文件

通过仅与CMake链接来创建可执行文件,c,assembly,cmake,C,Assembly,Cmake,我希望CMake在生成我的内核可执行文件时发出以下命令或与之等效的命令 mipsel linux gnu ld-o kernel hello.o termprint.o crtso.o libumps.o-G 0-nostlib-T./umps/umpscore.ldscript 请注意,上面的命令完全跳过gcc对kernel的调用——它只运行链接器。为了用CMake复制该命令,我尝试定义以下规则 file(WRITE null.c "") add_executable(kernel nul

我希望CMake在生成我的
内核
可执行文件时发出以下命令或与之等效的命令

mipsel linux gnu ld-o kernel hello.o termprint.o crtso.o libumps.o-G 0-nostlib-T./umps/umpscore.ldscript
请注意,上面的命令完全跳过
gcc
kernel
的调用——它只运行链接器。为了用CMake复制该命令,我尝试定义以下规则

file(WRITE null.c "")

add_executable(kernel null.c)
target_link_options(kernel PRIVATE ${LDFLAGS})
target_link_libraries(kernel phase0 crtso libumps termprint)
但问题是生成的
Makefile
发出编译步骤来生成
内核
,而我只想进行链接

$make VERBOSE=1内核
#大量产出
...
mipsel linux gnu gcc-rdynamic-G 0-nostdlib-T/home/acsor/Software/BiKaya/src/umps/umpscore.ldscript cmakfiles/kernel.dir/null.c.o cmakfiles/phase0.dir/src/phase0.c.o cmakfiles/crtso.dir/src/umps/crtso.S.o cmakfiles/libumps.dir/src/umps/libumps.o CMakeFiles/termprint.c.o kernel
...
#链接错误随之而来

我如何以CMake风格做我想做的事?您可以找到我的CMake设置。

无需为每个C文件创建单独的对象库。就这样做吧:

add_executable(kernel ${SRC}/phase0.c ${UMPS_SRC}/crtso.S ${UMPS_SRC}/libumps.S ${SRC}/termprint.c)
set_target_property(TARGET kernel APPEND PROPERTY LINK_FLAGS -rdynamic -G 0 -nostdlib -T ${UMPS_SRC}/umpscore.ldscript) 

不需要为每个C文件创建单独的对象库。就这样做吧:

add_executable(kernel ${SRC}/phase0.c ${UMPS_SRC}/crtso.S ${UMPS_SRC}/libumps.S ${SRC}/termprint.c)
set_target_property(TARGET kernel APPEND PROPERTY LINK_FLAGS -rdynamic -G 0 -nostdlib -T ${UMPS_SRC}/umpscore.ldscript) 

编译步骤在哪里?GCC还可用于链接.are
hello.o termprint.o crtso.o libumps.o
是否也由CMake文件编译?请出示相应的CMake。。我在考虑调整
CMAKE\u C\u LINK\u EXECUTABLE
变量,有什么缺点吗?所有这些
.C.o
扩展名都正确吗?..@Acsor也许最干净的方法是创建一个工具链文件?看一看,编译步骤在哪里?GCC还可用于链接.are
hello.o termprint.o crtso.o libumps.o
是否也由CMake文件编译?请出示相应的CMake。。我在考虑调整
CMAKE\u C\u LINK\u EXECUTABLE
变量,有什么缺点吗?所有这些
.C.o
扩展名都正确吗?..@Acsor也许最干净的方法是创建一个工具链文件?看一看。