windows – 如何使用CMake获取多配置生成器和基于makefile的目标
我想基于动态方式的目标文件中的所有符号生成
module definition file(想想
GTKMM的
gendef).
为此,我想 现在,我有以下内容 add_custom_command(TARGET tgt PRE_LINK COMMAND gendef ${CMAKE_CURRENT_BINARY_DIR}/tgt.def $<TARGET_FILE_NAME:tgt> ${CMAKE_CURRENT_BINARY_DIR}/$<$<BOOL:${CMAKE_BUILD_TYPE}>:${CMAKE_FILES_DIRECTORY}>/tgt.dir/${CMAKE_CFG_INTDIR}/*.obj ) 然而,这是非常笨拙和笨重的,因为我不得不在我看来使用generator expression.有没有更好的方法来实现这种效果,即为每个构建配置调用某个外部程序? 它是一个CMake错误(功能?),对于普通的makefile,所有目标文件都转到CMakeFiles / tgt.dir文件夹,而对于多配置生成器,所有文件都转到CMakeFiles的兄弟,即tgt.dir / $< CONFIG>?我是否错过了一些简单的变量,可以直接指向正确的位置? 解决方法
将我的评论转化为答案
由CMake生成的Makefile项目具有完全不同的内部结构,然后为Visual Studio生成解决方案/项目.我认为这既不是错误也不是特征,这些结构只针对其用例进行了优化. 据我所知,没有简单的CMake内部方法来获取目标文件列表或中间文件目录的路径,例如:阅读目标财产. 所以我已经采用了您的代码示例,并使用Visual Studio 14 2015和NMake Makefiles生成器对CMake 3.3.2进行了一些替代测试. 备择方案 >关于名为“CMake: Is there an elegant way to get list of object files participating into a library?”的CMake邮件列表的一个相关讨论建议使用中间静态库: add_library(tgtlib STATIC tgt.c) add_custom_command( OUTPUT tgt.def COMMAND gendef tgt.def $<TARGET_FILE_NAME:tgt> $<TARGET_FILE:tgtLib> ) file(WRITE dummy.c "") add_library(tgt SHARED dummy.c tgt.def) target_link_libraries(tgt tgtlib) >您可以在PRE_LINK步骤中添加特定于构建环境的元素: if(CMAKE_CONFIGURATION_TYPES) set(_obj_files "$(IntermediateOutputPath)*.obj") else() set(_obj_files "$?") endif() add_custom_command( TARGET MainProject PRE_LINK COMMAND gendef tgt.def $<TARGET_FILE_NAME:tgt> ${_obj_files} ) 参考 > NMAKE: Filename Macros (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – 域中的客户端通知
- 在Windows下克隆git repo时出现“错误:无法创建文件…(是一
- 简单的Windows邮件服务器推荐
- kubernetes – 重新启动kube-proxy wating条件
- 检查DLL文件是否是C#中的CLR程序集的最佳方式
- 无法将NuGet软件包“Microsoft ASP.NET MVC”从版本4.0.207
- Windows Server 2012 R2 WSUS-4:使用配置向导
- 使用therubyracer在Windows机器上安装ruby gem less-rails
- 箭头键在Windows批处理文件中触发“暂停”两次
- 在Windows 10中的HTTP.SYS和IIS中禁用HTTP / 2 / SPDY