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
CMake';s`FILE(GLOB`relative to?_Cmake - Fatal编程技术网

CMake';s`FILE(GLOB`relative to?

CMake';s`FILE(GLOB`relative to?,cmake,Cmake,如果我做了文件(GLOB“*.cpp”)它看起来在哪里?搜索的工作目录是什么?它是当前的源目录吗?它似乎没有记录在任何地方(尽管它是为文件(复制)).搜索发生在当前源目录中,即CMakeLists.txt的目录 关于您希望通过此实现的目标,我想强调以下几点: 注意:我们不建议使用GLOB来收集源文件列表 如果没有CMakeLists.txt文件,则当源 则生成的生成系统无法知道何时添加或删除 让CMake再生 文件(GLOB globbing expression)接受globbing expr

如果我做了
文件(GLOB“*.cpp”)
它看起来在哪里?搜索的工作目录是什么?它是当前的源目录吗?它似乎没有记录在任何地方(尽管它是为
文件(复制)
).

搜索发生在当前源目录中,即
CMakeLists.txt
的目录

关于您希望通过此实现的目标,我想强调以下几点:

注意:我们不建议使用GLOB来收集源文件列表 如果没有CMakeLists.txt文件,则当源 则生成的生成系统无法知道何时添加或删除 让CMake再生

文件(GLOB globbing expression)
接受globbing expression中的路径。因此,您可以在表达式中包含任何路径。以下示例在子文件夹testdata中查找扩展名为dat的所有文件:

文件(GLOB文件“${CMAKE\u CURRENT\u SOURCE\u DIR}/testdata/*.dat”)

注意:使用预定义的路径变量,如CMAKE_CURRENT_SOURCE_DIR,可以避免考虑相对路径,并使CMakeLists.txt更具可重用性和平台独立性

坏的:
文件(GLOB-generatedSources../buildarm/autocode/*.c”)

好:
文件(GLOB generatedSources“${PROJECT\u BINARY\u DIR}/autocode/*.c”)

您还可以指定相对路径。我不确定何时添加了
RELATIVE
选项,但它似乎至少在v3.0.2中可用。

谢谢!是的,我知道这些问题。虽然这是针对测试文件的,但我认为这是一个合理的折衷方案(如果省略测试也没什么大不了)。没错!在另一个答案中忘了提到这一点。你聪明地将答案弄糊涂了!我的整个问题是关于GLOB是否已经相对于
${CMAKE_CURRENT_SOURCE_DIR}
那么你为什么不直接使用
文件(GLOB files“testdata/*.dat”)
?我建议使用${CMAKE_CURRENT_SOURCE_DIR}来避免使用硬编码路径,或者不确定它是在当前文件夹中还是在当前文件夹中。