小编sak*_*kra的帖子

如何在CMake的try_compile函数中为OpenMP设置链接器标志

我想验证当前编译器是否可以使用openmp支持构建.该应用程序已经部署在各种各样的unix系统上,其中一些可能有旧版本的OpenMP,我想测试重要的OpenMP功能.所以,我想构建一个包含一些OpenMP调用的测试源文件.

因此,我创建了一个非常简单的测试文件,并尝试使用CMake的try_compile函数.遗憾的是,它似乎没有正确应用-fopenmp链接器标志.有谁知道如何强制链接器标志或查看链接器标志是否被应用于任何地方?

来自CMakeLists.txt

try_compile(
    HAVE_OPENMP
    ${APBS_ROOT}/src/config
    ${APBS_ROOT}/src/config/omp_test.c
    CMAKE_FLAGS "-DCMAKE_C_FLAGS=-fopenmp -DCMAKE_EXE_LINKER_FLAGS=-fopenmp"
    OUTPUT_VARIABLE TRY_COMPILE_OUTPUT
    )
Run Code Online (Sandbox Code Playgroud)

来自omp_test.c

#include <stdio.h>
#include <omp.h>

int main()
{
    int i;
    int threadID = 0;
    #pragma omp parallel for private(i, threadID)
    for(i = 0; i < 16; i++ )
    {
        threadID = omp_get_thread_num();
        #pragma omp critical
        {
            printf("Thread %d reporting\n", threadID);
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果输出是

Change Dir: src/config/CMakeFiles/CMakeTmp

Run Build Command:/usr/bin/make "cmTryCompileExec/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build
make[1]: Entering directory `src/config/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report /data/work/source/apbs/src/config/CMakeFiles/CMakeTmp/CMakeFiles 1
Building …
Run Code Online (Sandbox Code Playgroud)

cmake openmp

48
推荐指数
4
解决办法
5万
查看次数

dotnet使用本地包文件添加包

使用dotnet命令行工具,如何添加对使用nuget下载的现有本地包的引用?我曾尝试添加本地包项目bardotnet.

 $ dotnet add package /Users/sakra/foo/bin/Debug/foo.1.0.0.nupkg 
Run Code Online (Sandbox Code Playgroud)

该包foo.1.0.0.nupkgdotnet pack在不同的项目中创建.dotnet add package但是,该命令尝试foo.1.0.0.nupkghttps://api.nuget.org/下载该文件,该文件当然失败了.

c# nuget .net-core

34
推荐指数
4
解决办法
2万
查看次数

dotnet build指定main方法

dotnet用来从命令行构建一个.NET Core C#项目.该项目有多个带有main方法的类.因此我得到错误:

$ dotnet build
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All rights reserved.

Test.cs(18,28): error CS0017: Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point.

Build FAILED.
Run Code Online (Sandbox Code Playgroud)

传递/main开关会导致错误:

$ dotnet build /main:Test
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All rights reserved.

MSBUILD : error MSB1001: Unknown switch.
Switch: /main:Test
Run Code Online (Sandbox Code Playgroud)

如何将/main开关传递给dotnet …

c# msbuild .net-core

15
推荐指数
1
解决办法
3132
查看次数

csproj复制文件取决于操作系统

我正在使用.NET Core构建跨平台类库.根据为使用.csproj文件构建C#.NET Core项目的操作系统,我需要将本机库复制到项目的输出目录.例如,对于OS XI想要复制.dylib文件,对于Windows我要复制.DLL文件,对于Linux我要复制.so文件.

如何使用.csproj ItemGroup中的Condition子句执行此操作?

  <ItemGroup>
    <Content Include="libNative.dylib" Condition=" '$(Configuration)|$(Platform)' == 'Debug|OSX' ">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>   
Run Code Online (Sandbox Code Playgroud)

$(Platform)似乎不起作用.我可以使用不同的变量吗?

.net c# csproj .net-core

9
推荐指数
2
解决办法
2022
查看次数

如何以32位模式运行.NET Core项目

如何强制dotnet在Windows 10 64位计算机上以32位模式运行项目?无论dotnet restoredotnet build支持一个--runtime开关,例如:

dotnet restore --runtime win-x86
dotnet build --runtime win-x86
Run Code Online (Sandbox Code Playgroud)

dotnet run但是,子命令不支持--runtime交换机.

.net-core

8
推荐指数
2
解决办法
7650
查看次数

如何防止CMake在安装时为共享库创建符号链接?

有没有办法阻止CMake为共享库创建一个符号链接,比如libfoo.so当你使用so-versioning时(这意味着你会有类似的东西libfoo.so.0.8)?

我之所以问这个问题,是因为我有一个项目,我想让这个项目的多个版本并行安装.但是,如果多个包中存在类似符号链接的文件,则大多数包管理器会拒绝并行安装.

作为背景信息:我们正在使用CPack来构建软件包,最后我认为它是CPack的一个缺陷,你不能阻止这个符号链接,或者至少能够分离开发包和运行时包,例如debian.然而,到目前为止,我有一些幻想,只是阻止CMake创建符号链接可能比修补CPack更容易.

cmake shared-libraries software-packaging

7
推荐指数
1
解决办法
4120
查看次数

如何使用MSBuild.exe运行CMake单元测试

在从CMake构建文件生成Vistual Studio项目后,CMake生成一个解决方案,其中包含一个名为RUN_TESTS.vcproj的子项目,该子项目将所有单元测试作为后构建操作运行.

如何使用msbuild.exe从命令提示符调用RUN_TESTS?

msbuild RUN_TESTS.vcproj从构建目录运行不起作用.

在UNIX下,您可以make test对CMake生成的Makefile 执行简单操作.

msbuild cmake

6
推荐指数
1
解决办法
3090
查看次数

动态作为函数参数

Mathematica提供了许多能够Dynamic作为参数处理的函数.例如,函数FileNameSetter具有以下变体:

FileNameSetter[Dynamic[name]] 
 uses the dynamically updated current value of name, with the 
 value of name being reset if a different file is chosen.
Run Code Online (Sandbox Code Playgroud)

我想知道如何定义一个以动态表达式作为参数的函数模式.例如,这里是一次尝试包装LocatorPane函数的动态变量:

SinLocatorPane[Dynamic[sinvalue_]] := 
 LocatorPane[Dynamic[x, (x = #; sinvalue = Sin[First[#]]) &], 
             Plot[Sin[x], {x, 0, 10}]]
Run Code Online (Sandbox Code Playgroud)

用于动态表达式参数的正确模式是什么?在函数定义中使用动态参数是否有任何警告?

wolfram-mathematica

6
推荐指数
1
解决办法
834
查看次数

32位构建中的"bad codegen,boost diff in boost"错误

在Mac OS X 10.6下,我正在构建一个链接到boost 1.46的C++共享库.我正在使用与Xcode 4.0一起安装的命令行工具.

64位构建工作正常.在构建32位时,我在链接时收到以下错误消息:

ld: bad codegen, pointer diff in boost::detail::sp_counted_base::sp_counted_base()to global weak symbol vtable for boost::detail::sp_counted_basefor architecture i386
Run Code Online (Sandbox Code Playgroud)

我找到的唯一解决方法是使用g ++ - 4.0进行32位构建.我试过的其他编译器(g ++ - 4.2,llvm-g ++ - 4.2和clang ++)都产生了上面的错误.

macos xcode gcc clang

5
推荐指数
2
解决办法
4402
查看次数

测试std :: common_type是否存在

我想编写一个帮助器模板,检查模板参数包是否具有公共类型,即,如果应用于std::common_type包定义了类型.

使用std :: void_t和SFINAE我得出以下定义:

template<typename... Types, typename Enable = void>
struct has_common_type : std::false_type
{ };

template<typename... Types>
struct has_common_type<Types..., std::void_t<std::common_type<Types...>::type>> : std::true_type
{ };
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为模板参数包必须是最后一个参数.编译器引发以下错误:

error: template parameter pack must be the last template parameter
                        template<typename... Types, typename Enable = void>
Run Code Online (Sandbox Code Playgroud)

如何定义这样的模板呢?

c++ templates variadic-templates

5
推荐指数
1
解决办法
281
查看次数