add_library 在 CMake 中不能用于添加 CSharp 源文件?
Posted
技术标签:
【中文标题】add_library 在 CMake 中不能用于添加 CSharp 源文件?【英文标题】:add_library is not working in CMake for adding CSharp source files? 【发布时间】: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")
【问题讨论】:
【参考方案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,这可能是正确的选择。
【讨论】:
以上是关于add_library 在 CMake 中不能用于添加 CSharp 源文件?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 CMake 没有与我的自定义库(add_library/set_property)链接?