我有生以来第一次使用CMake构建C#DLL。此CMake适合较大的工作流程。否则,我将使用Visual Studio 2017进行创作和调试。
到目前为止,我的CMakeLists.txt看起来像这样,它是从我可以找到的几个示例中进行查看,剪切和粘贴的结果。
array_walk($myarray,'test_print');
function test_print($value, $key) {
echo "$key is $value\n";
}
此外,尝试构建会导致对.csprog文件的更改,其中
cmake_minimum_required(VERSION 3.8)
project("galapagos" CSharp)
add_executable("galapagos"
tortoise1.cs
tortoise2.cs
tortoiseForm.cs
packages.config
runTortoiseReport.cs
... etc ...
tortoiseTest.cs)
set_property(TARGET "galapagos" PROPERTY DOTNET_TARGET_FRAMEWORK_VERSION "v4.6.1")
set_property(TARGET "galapagos" PROPERTY WIN32_EXECUTABLE FALSE)
set_property(TARGET "galapagos" PROPERTY VS_CONFIGURATION_TYPE ClassLibrary)
set_property(TARGET "galapagos" PROPERTY VS_DOTNET_REFERENCES
"Microsoft.CSharp"
"PresentationCore"
"PresentationFramework"
"System"
"System.Core"
"System.Data"
"System.Data.DataSetExtensions"
"System.Windows.Forms"
"System.Net.Http"
"System.Xaml"
"System.Xml"
"System.Xml.Linq"
"WindowsBase"
.. etc ...
"C:/galapagos/galapagos.dll"
)
更改为
Class Library
消失的表单 有时 可以通过从项目中排除相应的文件,然后重新添加来重新出现。
没有生成DLL。现在,将应用程序更改为Console Application
的.csprog文件的更改是很奇怪的。
显然,
Console Application
具有与
相同的效果set_property(TARGET "galapagos" PROPERTY VS_CONFIGURATION_TYPE BeefChowMein)
这可能说明CMake无法理解set_property(TARGET "galapagos" PROPERTY VS_CONFIGURATION_TYPE ClassLibrary)
,并假定它是默认的ClassLibrary
。
由于构建过程显然已经破坏了表单定义,所以我现在遇到了很多类似的错误
ConsoleApplication
否则该项目将在VS秒之前正确构建。
VS和CMake是否存在共存问题?
我还缺少什么?
答案 0 :(得分:0)
请添加ADD_LIBRARY,而不要使用add_executable。
ADD_LIBRARY(${PROJECT_NAME} SHARED
..sources..
)