Cmake 如何指定依赖于其他文件的文件
我对cmake还很陌生,这是我项目根目录中的CMakeLists.txt文件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_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版)#您好,您对我的答案有什么反馈吗?