如果有编译和调用动态库,需要设置动态库的输出位置,否则运行时可能会出现找不到动态库,特别是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`文件的属性,包括
编译
器参数、
编译
输出
目录
属性等。