如果有编译和调用动态库,需要设置动态库的输出位置,否则运行时可能会出现找不到动态库,特别是MSVC生成的DLL。可以通过以下方式设置DLL的输出位置。

  • CMAKE_ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的位置,以及MSVC中动态库的lib文件的位置。
  • CMAKE_LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的位置
  • LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果没有指定 CMAKE_ARCHIVE_OUTPUT_DIRECTORY静态库则存放在该位置,动态库也一样。
  • CMAKE_RUNTIME_OUTPUT_DIRECTORY:可执行文件位置

可以在全局设置一下如下:

# Set output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})

这样所有的输出都会到指定目录

也可以单独为某个库设置输出目录:

set_target_properties(${target_name}
        PROPERTIES
        ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/libs"
        LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/libs" 
        RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/libs"
        FOLDER "lib")
  • CMAKE_BINARY_DIR:最外层CMAKE构建时的目录,也就是参数-B指定的目录
  • CMAKE_CURRENT_BINARY_DIR:当前库的输出目录
如果有编译和调用动态库,需要设置动态库的输出位置,否则运行时可能会出现找不到动态库,特别时MSVC生成的DLL。可以通过以下方式设置DLL的输出位置。这样所有的输出都会到指定目录。 CMAKE _ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的文件夹位置; CMAKE _LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的文件夹位置; LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果产生的是静态库并且没有 指定 CMAKE _ARCHIVE_OUTPUT_DIRECTORY 则存放在该 目录 下,动态库也类似; CMAKE _RUNTIME_OUTPUT_DI 首先打开顶层 目录 CMake List.txt 1、描述 cmake _minimum_required (VERSION 2.x)最低版本要求 2、设置建立工程工程名字 使用 SET 指令,就可以构建一个自定义变量了 3、设置 输出 路径 set( CMAKE _RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) set( CMAKE _LIBRAR... 方式1.两种设置方式 set( CMAKE _ARCHIVE_OUTPUT_DIRECTORY ${ CMAKE _BINARY_DIR}/lib) set( CMAKE _LIBRARY_OUTPUT_DIRECTORY ${ CMAKE _BINARY_DIR}/lib) set( CMAKE _RUNTIME_OUTPUT_DIR Where to put all the LIBRARY targets when built. This variable is used to initialize the LIBRARY_OUTPUT_DIRECTORY property on all the targets. See that target property for additional information. 说人话就是 指定 动态库或者静态库的 输出 目录
1、压缩包中打包文件为一个商用项目,由Makefile修改为 cmake 的源码,为了避免泄露源吗,源码中的头键词,经过批量替换,对敏感c码文件进行了删除。 2、 cmake 文件本身没有任问题,稍加修改,即可应用于自己项目。iMM_SDK为根 目录 。 3、MSLayer为一个静态库,iMM_Cache也为一个静态库,均为动态库, CMake list的具体实现,清参考源码,include和src中放的源码是示例,你 编译 时可以放入你自己源码。
$ mkdir ~/cpp-netlib-build $ cd ~/cpp-netlib-build $ cmake -D CMAKE _BUILD_TYPE=Debug \ > -D CMAKE _C_COMPILER=clang \ > -D CMAKE _CXX_COMPILER=clang++ \ > $HOME/cpp-...
CMake 中,可以使用`set_source_files_properties`函数来设置特定源文件的属性,包括 编译 输出 目录 属性。对于HLSL文件,可以使用以下方法设置 编译 输出 目录 属性: ``` cmake set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_OUTPUT_HEADER_FILE_DIRECTORY "${ CMAKE _CURRENT_BINARY_DIR}") set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_OUTPUT_OBJECT_FILE_DIRECTORY "${ CMAKE _CURRENT_BINARY_DIR}") 在这个示例中,我们使用`set_source_files_properties`函数来设置`myshader.hlsl`文件的 编译 输出 目录 属性,将 输出 目录 设置为`${ CMAKE _CURRENT_BINARY_DIR}`,即 CMake 的构建 目录 。`VS_SHADER_OUTPUT_HEADER_FILE_DIRECTORY`属性用于设置HLSL 编译 器生成的头文件的 输出 目录 ,`VS_SHADER_OUTPUT_OBJECT_FILE_DIRECTORY`属性用于设置 编译 器生成的二进制文件的 输出 目录 。 需要注意的是,在设置 编译 输出 目录 属性之前,需要确保 CMake 已经找到了正确的HLSL 编译 器。可以使用`find_program`函数来查找 编译 器,并将路径保存到变量中,例如: ``` cmake find_program(HLSL_COMPILER_PATH fxc.exe PATHS "C:/Program Files (x86)/Windows Kits/10/bin/x64") if(NOT HLSL_COMPILER_PATH) message(FATAL_ERROR "Could not find HLSL compiler (fxc.exe)") endif() set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_TYPE PixelShader) set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_MODEL 4.0) set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_ENTRYPOINT main) set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_OUTPUT_HEADER_FILE_DIRECTORY "${ CMAKE _CURRENT_BINARY_DIR}") set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_OUTPUT_OBJECT_FILE_DIRECTORY "${ CMAKE _CURRENT_BINARY_DIR}") set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_VARIABLE_NAME "MyShader") set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_DISABLE_OPTIMIZATIONS ON) set_source_files_properties(myshader.hlsl PROPERTIES VS_SHADER_ENABLE_DEBUG ON) 在这个示例中,我们使用`find_program`函数查找HLSL 编译 器,并将路径保存到`HLSL_COMPILER_PATH`变量中。然后,我们使用`set_source_files_properties`函数设置`myshader.hlsl`文件的属性,包括 编译 器参数、 编译 输出 目录 属性等。