Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Build 如何在CMakeList中打印/显示包含的目录_Build_Cmake_Makefile - Fatal编程技术网

Build 如何在CMakeList中打印/显示包含的目录

Build 如何在CMakeList中打印/显示包含的目录,build,cmake,makefile,Build,Cmake,Makefile,我正在尝试使用CMake构建一个微不足道的概念验证项目,我很快就厌倦了它——以至于我认为手工制作我自己该死的Makefile可能是一个更好的主意 我的目录结构如下所示: project: /extproj /src/file.cpp /include/file1.h 我的CMakeLists.txt文件包含以下部分,在阅读了CMake文档后,我天真地认为,我将为项目指定include目录: INCLUDE_DIRECTORIES (include/

我正在尝试使用CMake构建一个微不足道的概念验证项目,我很快就厌倦了它——以至于我认为手工制作我自己该死的Makefile可能是一个更好的主意

我的目录结构如下所示:

project:
    /extproj
    /src/file.cpp
    /include/file1.h
我的CMakeLists.txt文件包含以下部分,在阅读了CMake文档后,我天真地认为,我将为项目指定include目录:

INCLUDE_DIRECTORIES (include/ 
                     extproj/sdk/math/linearalg/ 
                     extproj/sdk/math/nonlinearsolvers/ 
                    )  
我正在尝试使用以下命令构建它

COMMAND${CMAKE\u CXX\u COMPILER}${CMAKE\u CXX\u FLAGS}${ALL\u SOURCES}

< > >代码> ${AlxOrths}}/Cuth>是一个列表变量,包含需要编译的所有C++文件。我已验证此变量是否包含正确的文件

然而,就我的一生而言,我无法计算到底是什么作为include目录传递给了编译器

我在网上搜索了一篇文章,推荐使用
get\u directory\u properties
。我试过了,当然CMake立即无法生成Makefile,并抱怨:

未知的CMake命令“获取目录属性”。

当我创建一个Makefile并对其运行make时,编译器会立即停止运行,并显示错误消息:

/path/to/project/src/file1.cpp:1:10:致命错误:“file1.h”文件不存在 发现


有没有办法,我可以找出到底是什么被用作传递给编译器的include路径?

我认为编译源文件的正确方法是使用
add_可执行文件(executableName${SRCS}
。然后使用
添加的目录包括_目录(…)
自动传递给编译器

如果使用自定义命令进行编译,则需要更改CMakeLists.txt文件

set(MY_INCLUDE_DIRS_FLAGS "-Iinclude/ -Iextproj/sdk/math/linearalg/ -Iextproj/sdk/mat/nonlinearsolvers/")

set(MY_COMPILE_COMMAND ${CMAKE_CXX_COMPILER} ${MY_INCLUDE_DIRS_FLAGS} ${CMAKE_CXX_FLAGS} ${ALL_SOURCES}

您是否尝试过
make VERBOSE=1
?我认为
命令${CMAKE\u CXX\u COMPILER}…
位于自定义命令中。该命令不会受到
include\u directories()
的影响-该命令用于CMAKE正常调用编译器(用于
add\u executable()
add\u library()
添加的目标),而不是用于“自定义”您试图执行的调用。@Angew:运行make with
VERBOSE
确实确认没有将包含文件传递给编译器。但我不明白的是(给出您的第二条语句),在自定义版本中使用了
{CMAKE\u CXX\u compiler}
中指定的正确编译器(同时忽略CXX_标志!)。看起来有些指令被传递给了自定义命令,而另一些指令被甩在了后面。在我对CMake说一些非常粗鲁的话之前,我最好先闭嘴。更具建设性的是,鉴于上述情况,我如何访问自定义命令中的集合指令/变量?请记住,您的设置在首先-手动驱动编译器,而不是让CMake为您执行。对于CMake知道的编译器调用,它将来自
CMake\u CXX\u标志
CMake\u CXX\u标志
(或
\u DEBUG
),
包含目录()
调用,
目标编译选项()
调用等。当您在自定义命令中运行编译器时,它与任何其他外部命令一样-它只会在显式传入参数的情况下运行。因此,只需在其中添加一些
-I
即可。getter命令是
get\u directory\u property
,顺便说一句。您是否检查了?