代码之家  ›  专栏  ›  技术社区  ›  engf-010

具有多个对象的一个源

  •  3
  • engf-010  · 技术社区  · 15 年前

    具有多个对象的一个源 我使用MSV 2010,我有一个C++源文件,必须编译成2个对象文件。 这些编译之间的差异是其中一个编译的“define UNICODE”,而不是另一个编译的“define UNICODE”。 我不能(也不想)使用这个模板。

    目前,我在我的项目中为此使用了3个源文件。 实际的源被排除在构建之外,而其他2个是围绕它的包装器。 这样地:

    文件=wrap-UNICODE.cpp

    #ifndef UNICODE
    #define UNICODE
    #endif
    
    #include "actual-source.cpp"
    // eof
    

    文件=wrap-ANSI.cpp

    #ifdef UNICODE
    #undef UNICODE
    #endif
    
    #include "actual-source.cpp"
    // eof
    

    当使用makefile时,我可以很容易地避免使用包装器soucrcces,使用不同的输出 开关。 我的问题是,我想知道,如果(和如何)我可以直接在一个MSVS项目。

    4 回复  |  直到 15 年前
        1
  •  1
  •   anatolyg    15 年前

    如果我正确地理解你想做什么,这是可能的。 我有msvisualstudio2005标准版;下面是我如何做到这一点的方法(如果您有不同的版本,您可能需要对其进行调整,或者它甚至可能在您的版本中不起作用;我希望您的计算机不会爆炸:))。

    第一步需要手动编辑项目文件。打开项目文件(它被称为 stuff.vcproj 在我的机器上)并复制提到您的文件的行:

    <File
        RelativePath=".\actual-source.cpp"
        >
    </File>
    <File
        RelativePath=".\actual-source.cpp"
        >
    </File>
    

    然后,将项目加载到MSVS中。转到解决方案资源管理器(在我的计算机上为Ctrl+Alt+L);项目将显示两个同名的文件。打开每个属性页(在我的机器上为Alt+F7)并添加所需的任何差异(例如预处理器定义)。

    还必须为对象文件设置不同的名称:选择输出文件,在同一窗口(属性页)中选择对象文件名,并添加不同的名称(例如。 actual-source-unicode ;MSVS将添加 .obj 编译时扩展)。如果不这样做,两个obj文件将具有相同的名称,一个将覆盖另一个。

        2
  •  0
  •   Luca Martini    15 年前

    你可以在你的解决方案中创建多个构建。只需进入解决方案的配置管理器(应该可以从解决方案的上下文菜单访问)。

    这样你也可以避免你的文件有两个版本。在两种配置中设置不同的define选项就足够了。

        3
  •  0
  •   Jörgen Sigvardsson    15 年前

    如果要构建UNICODE应用程序,Visual Studio将为您定义UNICODE。

        4
  •  0
  •   Jon    15 年前

    为什么不简单地为两个构建使用不同的配置(正如Luca Martini提到的),然后使用批构建?然后可以按任何方式比较编译的输出。