您的位置:首页 > 其它

为 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐