Build 如何在CMakeList中打印/显示包含的目录
我正在尝试使用CMake构建一个微不足道的概念验证项目,我很快就厌倦了它——以至于我认为手工制作我自己该死的Makefile可能是一个更好的主意 我的目录结构如下所示: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/
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 withVERBOSE
确实确认没有将包含文件传递给编译器。但我不明白的是(给出您的第二条语句),在自定义版本中使用了{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
,顺便说一句。您是否检查了?