为 CMake 添加 MSVC 预编译头文件支持
2008-05-19 13:09
555 查看
为 CMake 添加 MSVC 预编译头文件支持
CMake 官方版本的自带功能是不支持使用预编译头文件的,但是有很多人要求这个特性。在 CMake 的bugtrack系统中这个Feature Request的帖子中已经有人上传了解决这个问题的扩展模块,但是是分MSVC和Makefiles两个版本的,还没有整合成一个统一的预编译头的命令接口。下面是我从bugtrace系统中找到的MSVC版的解决方案。这个是我在实际工程中使用过的,非常好,没有问题。
文件:MSVCPCH.cmake
MACRO(USE_MSVC_PCH PCH_TARGET PCH_HEADER_FILE PCH_SOURCE_FILE)
IF(MSVC)
GET_FILENAME_COMPONENT(PCH_NAME ${PCH_HEADER_FILE} NAME_WE)
# Compute a custom name for the precompiled header.
IF(CMAKE_CONFIGURATION_TYPES)
SET(PCH_DIR "${CMAKE_CURRENT_BINARY_DIR}/PCH/${CMAKE_CFG_INTDIR}")
ELSE(CMAKE_CONFIGURATION_TYPES)
SET(PCH_DIR "${CMAKE_CURRENT_BINARY_DIR}/PCH")
ENDIF(CMAKE_CONFIGURATION_TYPES)
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/PCH)
SET(PCH_FILE ""/Fp${PCH_DIR}/${PCH_NAME}.pch"")
SET_TARGET_PROPERTIES(${PCH_TARGET} PROPERTIES COMPILE_FLAGS
"/Yu${PCH_HEADER_FILE} /FI${PCH_HEADER_FILE} ${PCH_FILE}")
SET_SOURCE_FILES_PROPERTIES(${PCH_SOURCE_FILE} PROPERTIES COMPILE_FLAGS
"/Yc${PCH_HEADER_FILE}")
SET_DIRECTORY_PROPERTIES(PROPERTIES
ADDITIONAL_MAKE_CLEAN_FILES ${PCH_DIR}/${PCH_NAME}.pch
)
ENDIF(MSVC)
ENDMACRO(USE_MSVC_PCH)
请将上面的代码保存为叫做MSVCPCH.cmake的CMake模块文件。我使用这个模块时,将这个文件放到工程目录下的 tools/cmake/modules 中。这个目录中都是我自己的扩展模块。
在工程最上层目录的CMakeLists.txt 文件的开始部分加入以下代码:
LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/tools/cmake/modules)
INCLUDE(MSVCPCH)
这个命令将 ${CMAKE_SOURCE_DIR}/tools/cmake/module 添加到CMake的模块文件的查找路径中。这样CMake就可以找到上面的自己扩展的宏。
ADD_LIBRARY(libxxx STATIC
${libpxxx_src}
${libpxxx_header}
stdafx.cpp
)
USE_MSVC_PCH(libxxx libxxx/stdafx.h stdafx.cpp)
像这样使用,libxxx是target名字。
官方的bugtrack中也有make版的扩展模块,但是我没使用过。等我用空把make版的试过后,再发出来。
下面是官方bugtrack帖子的地址:
0001260: Support for precompiled headers
相关文章推荐
- [C] tcharall(让所有平台支持TCHAR)v1.1。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释
- 为sourceinsight添加makefile、kconfig、*.S文件支持
- iis中添加视频播放支持mp4文件、flv文件等
- linux-3.4.6内核添加yaffs2文件系统支持后编译出错
- APK IPA --------------- iis7如何添加mime类型支持所有后缀名文件下载的方法(解决特殊后缀文件无法下载的问题)
- 在VC空项目里添加自定义的预编译头(或关于:无法打开预编译头文件:“Debug/xxx.pch”: No such file or directory的问题的解决)
- CMake添加头文件,库文件,链接库文件
- 为sourceinsight添加makefile、kconfig、.s文件支持
- 为sourceinsight添加makefile、kconfig、*.S文件支持
- CI在mimes.php添加对apk文件上传下载的支持
- FL2440移植LINUX-3.4.2(四)-- 添加支持YAFFS文件系统
- 【CMake】已有项目添加JNI支持
- 在Android4.2.2中添加对exFAT文件系统的支持
- React-Native 在iOS9之后,网络请求默认为Https请求,如需支持Http,修改info.plist文件添加键值对设置允许http访问。
- 详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
- 为sourceinsight添加makefile、kconfig、*.S文件支持
- iOS 添加预加载文件(预编译)Header
- 为sourceinsight添加makefile、kconfig、*.S文件支持
- android 添加或者取消对于某种媒体文件格式的支持
- Webstorm 添加新建.vue文件功能并支持高亮vue语法和es6语法