如何从 CMake 构建目标仅生成目标文件 (*.o)?

2024-05-17

我正在尝试使用 CMake 构建一个对象文件,但我似乎无法让 CMake 构建除完整可执行文件之外的其他内容。我基本上是在寻找以下编译的结果(结果将加载到 VxWorks 目标上并然后链接):

$(CC) $(CFLAGS) $(INC_DIRS) -c src/object.c

我尝试过改变OUTPUT_NAME目标的属性,但这似乎也没有帮助。

我认为我可以通过使用自定义命令来解决这个问题,但这似乎我也在解决 CMake 提供的好东西。

感谢您的帮助!


这个答案是在CMake 邮件列表 http://www.cmake.org/pipermail/cmake/2011-January/042284.html它就像一个魅力:

看看下面的${CMAKE_SOURCE_DIR}/cpo script:

#!/bin/sh
d=$1; shift
while [ "$1" != "--" ]; do
  cp $1 $d/$(basename $1); shift
done

现在,查看以下 CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(CPO C) 
FILE(WRITE ${CMAKE_BINARY_DIR}/f.c "void f(void){}\n")
ADD_LIBRARY(f SHARED f.c)
SET_TARGET_PROPERTIES(f PROPERTIES RULE_LAUNCH_LINK
  "${CMAKE_SOURCE_DIR}/cpo ${CMAKE_BINARY_DIR} <OBJECTS> --"
)

启动脚本“cpo”使目标“f”生成目标文件 作为第一个参数传入的目录而不是库; 其他一切都应该照常进行。关键是剧本 访问<OBJECTS>占位符,因此可以对对象进行操作 文件,而忽略“--”之后的实际链接命令。那 这样,您就可以使用 CMake 的所有功能进行编译和 在链接发生之​​前拦截。 IMO,这是一个相当干净的 解决方案应该能够轻松适应您的需求;不足之处 是使用RULE_LAUNCH_LINK仅限于Makefile发电机。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 CMake 构建目标仅生成目标文件 (*.o)? 的相关文章

随机推荐