以下两个之间有什么区别吗?
set(FOO true CACHE BOOL "description")
option(FOO "description" ON)
Run Code Online (Sandbox Code Playgroud)
背景:即使我已经使用CMake一段时间了,我option
今天才注意到这个命令,因此我一直在使用set
:我想知道用第二个替换第一个是否安全/值得.
我正在尝试使用Windows 10上的GUI 构建FIATCMake
.
CMake Error at CMakeLists.txt:3 (project):
Failed to run MSBuild command:
MSBuild.exe
to get the value of VCTargetsPath:
Configuring incomplete, errors occurred!
Run Code Online (Sandbox Code Playgroud)
我配置CMake使用Visual Studio 15 2017编译器.
我怎样才能解决这个问题?
如果需要,这是CMakeLists.txt文件
cmake_minimum_required(VERSION 3.2)
include(CheckCXXCompilerFlag)
project(FIAT CXX)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
if(CHECK_CXX_COMPILER_USED1)
# Using Visual Studio C++
elseif("${CMAKE_CXX_COMPILER_ID}x" STREQUAL "MSVCx")
# Using Intel C++
elseif("${CMAKE_CXX_COMPILER_ID}x" STREQUAL "Intelx")
else(CHECK_CXX_COMPILER_USED1)
# GCC or Clang
# At least C++11
CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17)
CHECK_CXX_COMPILER_FLAG("-std=c++1z" COMPILER_SUPPORTS_CXX1Z)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
CHECK_CXX_COMPILER_FLAG("-std=c++1y" COMPILER_SUPPORTS_CXX1Y)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
if(COMPILER_SUPPORTS_CXX17) …
Run Code Online (Sandbox Code Playgroud) 我在我的Ubuntu Linux上安装了CMake.试图在Linux中运行CMake GUI.我发现它适用于Windows,但在哪里获取它以及如何在Linux中运行?
或任何包含目录/库.
我使用cmake gui工具,所以我运行它,通常gui将突出显示它找不到的包含或库,并让你打开一个打开的对话框来设置路径,但它不会为这个cmake cofig做那个它告诉你的gui工具输出中的红色文字,所以,
CMake Error at C:/Program Files/CMake/share/cmake-3.0/Modules/FindPackageHandleStandardArgs.cmake:136 (message):
Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.0/Modules/FindPackageHandleStandardArgs.cmake:343 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files/CMake/share/cmake-3.0/Modules/FindZLIB.cmake:101 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
src/CMakeLists.txt:7 (find_package)
Run Code Online (Sandbox Code Playgroud)
所以仍然使用gui如何将cmake指向zlib包括dir?
我正在尝试创建一个开源C++项目.我希望它尽可能容易构建,但同时跨平台.我不需要像boost或Qt这样的gui或重型库,所以我决定使用GitHub,CMake和LibSourcey.我的问题是,我无法找到一种方法来使我的项目易于在Windows中构建,这是我的开发环境.如何在Windows中"安装"一个库以便在我的项目中使用?我甚至必须在Windows中安装它吗?是否可以自动下载,构建和链接它?
在Windows上,除了安装程序之外,我还想制作一个可移植版本,因此不需要任何硬编码库路径.
我认为,在某些平台上,如Linux,库是可分离构建的,并由维护者打包.所以我不应该只捆绑我自己的副本.
所以,我的问题是:我如何建立一个跨平台且易于构建的项目,以及最佳实践是什么?
我知道cmake是构建生成器.这意味着它可以根据CMakeLists.txt的指令生成适当的构建(makefile,Visual Studio项目等).但我不明白我认为有两个相关的事情:
为什么cmake-gui中有两个按钮"Configure"和"Generate"?在我读过的命令行教程(例如这个)中,通常的过程是用一个cmake
命令完成的.
什么是cmake世界的缓存?AFAIK是按下"配置"按钮时的状态,但未按下"生成"按钮.但为什么这有用呢?按"配置"后弹出的所有变量是什么意思?为什么我应该编辑它们?是不是唯一允许通过CMakeLists.txt完成的配置?
谢谢
我正在尝试安装Assimp以用于我的项目,但我遇到了一些麻烦.我目前正在使用win 10 pro和visual studio 15 2017.
我已经下载了Assimp 4.0.1.zip,将其解压缩到一个目录中,加载了cmakeGui并运行了两次配置,然后生成了Assimp/build目录.
接下来我进入了Assimp/build,我运行了Assimp.sln并选择了ALL_BUILD,我认为它是.然后我复制了.lib和.dll旁边的/ code/debug中的所有文件,并将它们全部移动到我的exe所在的项目的Debug目录中.我将.lib复制到我的opengl/libs目录中,并将/ include中的所有头文件从最初提取的下载文件复制到我的opengl/includes/assimp目录中.
最后,我调整了我的项目链接器设置,以包括assimp.lib和assimp.dll(简化此帖子的别名)
当我尝试构建项目时,它说它无法打开dll,在进行实验时,我将dll复制到项目目录中,并与main.cpp和我的其他文件一起再次运行,这次它说"文件无效或损坏:无法读取在0x378"
可以肯定地说我需要研究编译,链接和cmake,但现在我开始了.
在我将标题包含在我的项目中之后,我得到它以停止抱怨,我以为我有它工作(也许我做...).为此,我从新的,构建的Assimp开始,像以前一样,将所有带有dll的文件移动到我的libs目录中,将所有包含从下载中转储到我的包中,同时将config.h从构建移动到此目录中.然后我在项目中设置链接器设置,并没有将任何内容移动到我的项目目录中.
之后,它停止了抱怨,所以我继续我正在关注的教程系列.我编译了,得到了一大堆错误,把它们修改为0然后突然我得到了8个新的错误.
严重级代码描述项目文件行抑制状态错误LNK2019未解析的外部符号_aiGetMaterialTextureCount在函数"public:unsigned int __thiscall aiMaterial :: GetTextureCount(enum aiTextureType)const"中引用(?GetTextureCount @ aiMaterial @@ QBEIW4aiTextureType @@@ Z)opengl_model_loading F:\ Desktop\MyDocuments\Tuts\opengl\getting started\opengl_model_loading\opengl_model_loading\main.obj 1
这个错误让我感觉这可能是由于dll.请指教.
我正在学习CMake,我在理解其多步骤工作流程时遇到了问题.到目前为止,我的理解是你:
CMakeLists.txt
cmake
从子目录运行以生成构建文件(在我的情况下为Makefile)make
但是,我不明白你应该如何处理不同的目标(Release vs Debug).通过在两个不同的子目录中运行CMake?
另外,我不明白你为什么要编辑CMakeCache.txt
(还有一个GUI工具)../configure
通过传递不同的选项来模仿你将要实现的目标?
所以我试图在 Windows 上用 cmake 设置一个项目
这是我的项目结构的样子:
这个想法是“source”目录包含GameEngine库的所有.cpp文件,“include”目录包含所有头文件,“testing”目录用于测试库。所以它应该依赖于 GameEngine.dll 和 GameEngine.lib(在 Windows 上)。
我的顶级CMakesLists.txt 包含:
cmake_minimum_required(VERSION 2.7)
PROJECT( GameEngine )
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include )
ADD_SUBDIRECTORY( source )
add_subdirectory( testing )
Run Code Online (Sandbox Code Playgroud)
“源”目录中
的 CMakeLists.txt包含:
project(GameEngineLib)
file(GLOB src "*.cpp" "../include/*.h")
add_library(${PROJECT_NAME} SHARED ${src})
Run Code Online (Sandbox Code Playgroud)
并且“testing”目录中的 CMakeLists.txt包含:
project(Testing)
file(GLOB src "*.h" "*.cpp")
ADD_EXECUTABLE( ${PROJECT_NAME} ${src})
target_link_libraries(${PROJECT_NAME} GameEngineLib)
Run Code Online (Sandbox Code Playgroud)
这一切在 linux 上都可以正常工作。
当我构建它时,我得到两个文件夹(+ 一些其他文件夹),“testing”和“source”以及一个输出可执行文件和 .so 文件的 Makefile。
并且可执行文件已经知道在哪里可以找到 .so 文件,所以我可以毫无错误地运行。
当我使用 Visual Studio 在 Windows 上构建时,问题就出现了。
一切正常,除了我在构建“ALL_BUILD”项目后得到的测试可执行文件给我一个错误,说它找不到 …
我的项目使用带有 Visual Studio 的 CMake-GUI。我的系统上没有安装 GPU 卡。生成的Visual Studio 解决方案将nvcc 标志设置为compute_30 和sm_30,但我需要将其设置为compute_50 和sm_50。
我使用带有 64 位编译的 CMake 3.10.1 和 Visual Studio 14 2015。
我希望取代 CMake 的默认设置。我没有使用 Find CUDA 方法来搜索和添加 CUDA。我在 CMAKE 中添加 CUDA 作为语言支持,VS 启用基于此的 CUDA Build 自定义。