CMake:错误的构建目标目录

莫妮尔·哈吉(Monir hadji)

系统 :

Linux anon-S 3.19.0-31-generic #36~14.04.1-Ubuntu SMP Thu Oct 8 10:21:08 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

CMake版本:

anon@anon-S:~/$ cmake --version
cmake version 3.2.2

主要的CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)

set(CMAKE_CXX_STANDARD 11)

add_subdirectory(${PROJECT_SOURCE_DIR}/src)
add_subdirectory(${PROJECT_SOURCE_DIR}/test)

anon@anon-S:/home/anon/project/build$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/anon/project/

构建文件已被写入:/home/anon/project/代替/home/anon/project/build/

我在使用cmake 3.4.1的Debian jessie上没有这个问题:

anon@anon-S:/home/anon/project/build$ cmake ..
-- The C compiler identification is GNU 5.2.1
-- The CXX compiler identification is GNU 5.2.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.11") 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/anon/project/build/
ComicSansMS

为了澄清这里发生的事情:

运行时,cmake <directory>它执行以下两项操作之一:

  • 如果<directory>是源目录(即其中有CMakeLists.txt),它将在该源上运行CMake并将当前工作目录用作构建目录。
  • 如果<directory>是构建目录(即其中有一个CMakeCache.txt),它将在用于创建构建目录的任何源目录上运行CMake。

请注意,后一种情况优先于第一种情况。也就是说,如果您执行以下操作:

cd <src_dir>
cmake .
 *oops, wrong directory, i didn't mean that*
cd build
cmake ..

您可能希望这将以CMake<src_dir>作为源和build构建目录运行。但是由于第一次偶然的CMake运行,<src_dir>现在也是源代码构建的构建目录!因此,第二次运行将忽略其中的所有内容,buildsrc_dir同时用作源目录和构建目录。

这确实是一个非常棘手的问题,但是幸运的是,一旦您意识到正在发生的事情,就可以很快地解决它:只需CMakeCache.txt从中删除即可<src_dir>

请注意,在新版本的CMake(3.13以上),就可以使用-S,并-B命令行选项来澄清对目录参数的含义:

-S <path-to-source>

要构建的CMake项目的根目录的路径。

-B <path-to-build>

CMake将用作构建目录根目录的目录路径。

如果该目录尚不存在,CMake将创建该目录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CMake更改强制目标目录名称(安装目标)

来自分类Dev

sbt项目构建中的多个目标目录

来自分类Dev

将多个源目录构建到同一目标目录中

来自分类Dev

将jar文件从多项目Gradle构建部署到目标目录

来自分类Dev

指示堆栈构建可执行文件的目标目录

来自分类Dev

无法构建war文件:无法删除目标目录中的validation-api-2.0.1.Final.jar

来自分类Dev

选择或获取应用的xcodebuild目标目录

来自分类Dev

rsync无法选择正确的目标目录

来自分类Dev

从查找结果中省略目标目录

来自分类Dev

提取tarball时创建目标目录

来自分类Dev

VLC bash转码脚本目标目录

来自分类Dev

转到符号链接文件目标目录

来自分类Dev

在HIVE中更改目标目录

来自分类Dev

阻止Grunt在目标目录中运行

来自分类Dev

指定的目标目录不存在

来自分类Dev

基于当前用户的Java目标目录

来自分类Dev

结果Rsync目标目录似乎太大

来自分类Dev

更改命令 cd 的目标目录 ~

来自分类Dev

Eclipse的氧气4.7的错误,同时增加JDK 11 - 目标目录不是JDK根

来自分类Dev

目标目录名称中带有“-=”的cd命令错误

来自分类Dev

复制模板时出现“目标目录不存在”错误

来自分类Dev

使用rsync删除目标目录(目录和父目录)

来自分类Dev

Buildroot更改目标目录/创建“目标外”包

来自分类Dev

tar的目标目录结构与原始目录结构不同

来自分类Dev

NuGet软件包目标-如何在构建时将文件复制到目标目录的子文件夹?

来自分类Dev

我应该在目标目录中放什么?

来自分类Dev

hadoop抱怨试图覆盖非空目标目录

来自分类Dev

在Maven(Java)中获取目标目录路径

来自分类Dev

rsync到没有目标目录的远程

Related 相关文章

热门标签

归档