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 如何指定依赖于其他文件的文件_Cmake - Fatal编程技术网

Cmake 如何指定依赖于其他文件的文件

Cmake 如何指定依赖于其他文件的文件,cmake,Cmake,我对cmake还很陌生,这是我项目根目录中的CMakeLists.txt文件 cmake_minimum_required (VERSION 2.6) project (Tools C) set(CMAKE_C_FLAGS "-ansi -pedantic -Wall -Werror") include_directories("include") SET_SOURCE_FILES_PROPERTIES(lib/xstr.c PROPERTIES

我对cmake还很陌生,这是我项目根目录中的CMakeLists.txt文件

cmake_minimum_required (VERSION 2.6)
project (Tools C)

set(CMAKE_C_FLAGS "-ansi -pedantic -Wall -Werror")
include_directories("include")

SET_SOURCE_FILES_PROPERTIES(lib/xstr.c PROPERTIES
                            OBJECT_DEPENDS "lib/xalloc.c")

SET_SOURCE_FILES_PROPERTIES(lib/counter.c PROPERTIES
                            OBJECT_DEPENDS "lib/xstr.c")

SET_SOURCE_FILES_PROPERTIES(lib/dynamic_array.c PROPERTIES
                            OBJECT_DEPENDS "lib/xalloc.c")

SET_SOURCE_FILES_PROPERTIES(lib/list.c PROPERTIES
                            OBJECT_DEPENDS "lib/xalloc.c")



add_executable(cat cat.c lib/xalloc.c lib/xfopen.c)
add_executable(counter counter.c lib/counter.c)
add_executable(darr dynamic_array.c lib/dynamic_array.c)
add_executable(linked list.c lib/list.c)
我将包含
main()
函数的c文件保存在根目录中。我将其他c文件保存在
{project\u root}/lib
目录中

我的问题是,我遇到以下错误:

[ 33%] Built target cat
mingw32-make.exe[2]: *** No rule to make target 'lib/xstr.c', needed by 'CMakeFi
les/counter.dir/lib/counter.c.obj'.  Stop.
CMakeFiles\Makefile2:94: recipe for target 'CMakeFiles/counter.dir/all' failed
mingw32-make.exe[1]: *** [CMakeFiles/counter.dir/all] Error 2
Makefile:75: recipe for target 'all' failed
mingw32-make.exe: *** [all] Error 2
我想要实现的是将
{project_root}/cat.c
{project_root}/lib/xstr.c
{project_root}/lib/xalloc.c
等链接起来


我怎样才能做到这一点呢?

你把cmake看得太复杂了!您必须在目标而不是源文件中设置依赖项。在您的特定情况下,我建议您添加一些中间库。您可以将它们设置为静态,以便链接到它们的可执行文件在运行时检索链接库时不会出现问题(可执行文件将集成他从库中需要的所有符号和定义)

您的代码可以按如下方式缩减:

cmake_minimum_required (VERSION 2.8) # <<--2.6 is very outdated
project (Tools C)

set(CMAKE_C_FLAGS "-ansi -pedantic -Wall -Werror")
include_directories("include")

add_library(xalloc STATIC lib/xalloc.c)
add_library(xstr STATIC lib/xstr.c)

add_executable(cat cat.c lib/xfopen.c)
add_executable(counter counter.c lib/counter.c)
add_executable(darr dynamic_array.c lib/dynamic_array.c)
add_executable(linked list.c lib/list.c)

target_link_libraries(cat xalloc)
target_link_libraries(counter xstr xalloc) #xstr needs stuff from xalloc
target_link_libraries(darr xalloc)
target_link_libraries(linked xalloc)

cmake_最低要求(2.8版)#您好,您对我的答案有什么反馈吗?