【问题标题】:add_library is not working in CMake for adding CSharp source files?add_library 在 CMake 中不能用于添加 CSharp 源文件?
【发布时间】:2013-09-24 03:49:24
【问题描述】:

我正在尝试从 .cs 文件集构建 CSharp DLL。我使用add_library() 函数添加源文件(.cs 文件)。但它给出了诸如“add_library for library libname without any source files”之类的警告。请提供解决方案以使其正常工作。

提前致谢。

CMakeLists.txt 是:

cmake_minimum_required(VERSION 2.8)

project(MyAddIn)

AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/MyAdd-In/ MyAddIn_SOURCES)     


SET_SOURCE_FILES_PROPERTIES(${MyAddIn_SOURCES} PROPERTIES LANGUAGE CSharp)

ADD_LIBRARY(AddInTrg SHARED ${MyAddIn_SOURCES})

SET_TARGET_PROPERTIES(AddInTrg PROPERTIES 
                               LINKER_LANGUAGE CSharp
                               RUNTIME_OUTPUT_DIRECTORY bin
                               RUNTIME_OUTPUT_DIRECTORY_DEBUG bin
                               RUNTIME_OUTPUT_NAME MyAddIn_Bin
                               ARCHIVE_OUTPUT_DIRECTORY lib
                               ARCHIVE_OUTPUT_DIRECTORY_DEBUG lib
                               OUTPUT_NAME MyAddIn_Bin)

add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/MyAddIn_Bin.dll
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/MyAdd-In
                   COMMAND C:/WINDOWS/Microsoft.NET/Framework/v3.5/csc.exe
                   ARGS 
                   -target:library                 
                   -out ${CMAKE_CURRENT_BINARY_DIR}/bin/MyAddIn_Bin.dll
                   "${CMAKE_CURRENT_SOURCE_DIR}/MyAdd-In/Ribbon.cs" "${CMAKE_CURRENT_SOURCE_DIR}/MyAdd-In/ThisAddIn.cs" "${CMAKE_CURRENT_SOURCE_DIR}/MyAdd-In/Ribbon.xml"
                   COMMENT "-- Generating AddIn Dll")

【问题讨论】:

    标签: c# windows visual-studio-2010 cmake


    【解决方案1】:

    截至CMake 3.8,CMake 现在完全支持 C# 作为一种语言。您现在应该能够使用以下内容创建 C# 程序集目标 (DLL):

    # Define the DLL target, including all relevant project files.
    add_library(AddInTrg SHARED ${MyAddIn_SOURCES})
    
    # Set the .NET Framework version for the target.
    set_property(TARGET AddInTrg PROPERTY VS_DOTNET_TARGET_FRAMEWORK_VERSION "v4.6.1")
    # Set the C# language version (defaults to 3.0 if not set).
    set(CMAKE_CSharp_FLAGS "/langversion:6")
    # Add in some .NET reference libraries.
    set_property(TARGET AddInTrg PROPERTY VS_DOTNET_REFERENCES
        "Microsoft.CSharp"
        "System"
        "System.Core"
        "System.Data"
        "System.Deployment"
        "System.Drawing"
        "System.Net.Http"
        "System.Xml"
    )
    

    您还可以使用 CMake 指定 .NET 和 C# 版本,并提取任何必要的 .NET 引用。

    注意:此支持仅包含 Visual Studio 2010 及更高版本。

    【讨论】:

      【解决方案2】:

      CMake 目前不支持 C#。

      特别是,add_library 命令不适用于.cs 源文件。您可以尝试使用自定义目标手动处理所有编译,但请注意,这非常难以实现并且收益有限。

      另外,看看 CMake 的 ExternelProject_Add。如果您只想在更大的 CMake 环境中使用 MSBuild 构建外部 .csproj,这可能是正确的选择。

      【讨论】:

        猜你喜欢
        • 2021-12-22
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 2023-03-25
        • 1970-01-01
        相关资源
        最近更新 更多