Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
如果生成源代码不足,CMake无法确定标头依赖关系? 我一直使用CGub来管理一个单独的小型C++项目(UNIX MaxFraseBasic),并决定将其转换为更为有组织的源代码构建。但是,当它没有源代码时(通过执行cmake..in-build/),我的头文件不再依赖于它们的源文件。如果我从顶级做起,一切都会好起来的_C++_Linux_Cmake - Fatal编程技术网

如果生成源代码不足,CMake无法确定标头依赖关系? 我一直使用CGub来管理一个单独的小型C++项目(UNIX MaxFraseBasic),并决定将其转换为更为有组织的源代码构建。但是,当它没有源代码时(通过执行cmake..in-build/),我的头文件不再依赖于它们的源文件。如果我从顶级做起,一切都会好起来的

如果生成源代码不足,CMake无法确定标头依赖关系? 我一直使用CGub来管理一个单独的小型C++项目(UNIX MaxFraseBasic),并决定将其转换为更为有组织的源代码构建。但是,当它没有源代码时(通过执行cmake..in-build/),我的头文件不再依赖于它们的源文件。如果我从顶级做起,一切都会好起来的,c++,linux,cmake,C++,Linux,Cmake,所以我做了一个小的测试版本,发现了同样的问题。顺便说一下,我使用的是Arch Linux系统。最初,我的项目(有意)位于/tmp目录中,通过阅读以下问题,我认为这可能是罪魁祸首,因为CMake可能将目录视为系统目录,因此认为我的标题来自系统库,因此我将其移动到了我的主文件夹中。没有什么变化。然后,我在我的CMakeLists.txt中乱弄路径,但它似乎没有改变任何东西。我还尝试用绝对路径替换所有内容 project/CMakeLists.txt: cmake_minimum_required (

所以我做了一个小的测试版本,发现了同样的问题。顺便说一下,我使用的是Arch Linux系统。最初,我的项目(有意)位于/tmp目录中,通过阅读以下问题,我认为这可能是罪魁祸首,因为CMake可能将目录视为系统目录,因此认为我的标题来自系统库,因此我将其移动到了我的主文件夹中。没有什么变化。然后,我在我的CMakeLists.txt中乱弄路径,但它似乎没有改变任何东西。我还尝试用绝对路径替换所有内容

project/CMakeLists.txt:

cmake_minimum_required (VERSION 2.8)
project (MYTEST)

include_directories(${CMAKE_SOURCE_DIR}/include)

file(GLOB SOURCES "${CMAKE_SOURCE_DIR}/src/*.cpp")
add_executable(app ${SOURCES})

project/src/hey.cpp:

#包括“hey.h”
int main()
{

std::cout如果您的构建目录是源目录的子目录,那么它不是真正的源代码外构建,而是一种混合。建议的CMake方法是在源目录和二进制目录完全不相关的情况下进行适当的源代码外构建。这意味着它们可以是兄弟目录或进一步删除,但两者都不是的后代另一个。

你能尝试两件事吗?1.使你的构建树成为源代码树的同级树(例如,
cmake../project
)。2.同时将头文件添加到
add\u executable()中
command。如果您执行这些操作,问题行为是否会改变?@Angew哦哇,是的,让它成为兄弟姐妹修复了它,谢谢!但是为什么?您的情况在引用的问题中没有描述吗?@Tsyvarev我想是的,但我尝试了该解决方案,但没有成功/:您知道为什么会发生这种情况吗?我想在CMakeLists.txt所在的目录是使用cmake进行编译的标准方法。后续问题:
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.15

CMakeFiles/app.dir/src/hey.cpp.o: ../src/hey.cpp
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.15

CMakeFiles/app.dir/src/hey.cpp.o: src/hey.cpp
CMakeFiles/app.dir/src/hey.cpp.o: include/hey.h