用于msvc 10的cmake +预编译头+对象库是错误的。或者是吗?

时间:2013-03-06 15:41:31

标签: c++ cmake visual-studio-2010

我有一个巨大的跨平台项目由cmake处理,其编译时间使用预编译头(PCH)加速,cmake调用的对象库只是对象文件的集合。

请注意,我在MakeLists.txt文件中选择了PCH和对象库是可选的,因为事实证明使用CMake 2.8.10.2(最新)和msvc 10 RTM同时转换两个选项会触发“符号双-definition“错误,在任何其他设置下都没有显示(其他选项与MSVC10组合或任何与GCC& clang的选项组合)

error LNK2005: "int `anonymous namespace'::defined_twice_if_msvc_plus_precompiled_headers_plus_object_library" (?defined_twice_if_msvc_plus_precompiled_headers_plus_object_library@?A0x57991313@@3HA) was already defined in common-header.obj C:\git\bug\build\common-header.obj  main

代码(下面)非常简单:一个主入口点(main.cpp),一个源文件,可选地打包在一个cmake对象库中,(lib.cpp),其内容应该可以从入口点访问header(lib.hpp),一个可选择预编译的公共头(common-header.hpp),最后是一个与预编译头相对应的源文件(对于MSVC10的/ Yc选项,对GCC / Clang没用)。 / p>

所以我的问题是:

  • 此代码是否应按标准编译?我认为答案是肯定的。
  • 如果是,问题是来自CMake还是MSVC10?

由于


(完全可以与以下内容重现)

main.cpp的内容:

#include "common-header.hpp"
#include "lib.hpp"

int main ()
{
}

common-header.hpp的内容:

#ifndef _INCL_COMMON_HEADER
#define _INCL_COMMON_HEADER

//variable inside anonymous namespace mimics the troublemaking code inside #include <boost/asio.hpp>
namespace {
    int defined_twice_if_msvc_plus_precompiled_headers_plus_object_library;
}
#endif

lib.hpp的内容:

//empty

lib.cpp的内容:

#include "common-header.hpp"
#include "lib.hpp"

common-header.cpp的内容:(仅对MSVC预编译头文件是必需的)

#include "common-header.hpp"

CMakeLists的内容,为msvc&amp;提供可选的PCH和可选对象lib。 gcc可在此处获取(http://pastebin.com/BAdcpzMb


0 个答案:

没有答案