CMake找不到头文件的函数
我的目录结构是这样的
root
|-head
| '-apue.h
| '-apue.c
| '-CMakeLists.txt
|-src
| |-c01
| | '-test.c
| | '-CMakeLists.txt
| '-main.c
| '-CMakeLists.txt
'-CMakeLists.txt
在这里报错,显示HelloFunc未定义。
main.c:
int main(){
//HelloFunc(); //注释掉这一行,就会报错显示HelloFunc未定义
test(); //在这里报错,显示HelloFunc未定义
//test()函数在test.c文件里面,
return 0;
}
test.c:
#include "apue.h"
void test() {
HelloFunc();
}
apue.h:
#include <stdio.h>
void HelloFunc();
apue.c:
#include "apue.h"
void HelloFunc() {
printf("Hello World from HelloLib\n");
}
下面是目录下的CMakeLists.txt
root目录的CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(Demo)
add_subdirectory(src)
add_subdirectory(head)
head目录的CMakeLists.txt:
set(Head_Files apue)
add_library(Apue ${Head_Files})
target_include_directories(Apue PUBLIC ${PROJECT_SOURCE_DIR})
src目录的CMakeLists.txt:
add_subdirectory(c01)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/head)
set(Main_Files
main.c
#ListDirFilesName.c
)
add_executable(${PROJECT_NAME} ${Main_Files})
target_link_libraries(${PROJECT_NAME} LINK_PUBLIC Apue)
target_link_libraries(${PROJECT_NAME} LINK_PUBLIC c01)
c01目录的
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/head)
add_library(c01 test.c)
target_include_directories(c01 PUBLIC ${PROJECT_SOURCE_DIR})
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的目录结构就不清晰,首先不用每个目录下都有个一个cmakelist,一般一个peoject有一个,如果要加测试,在根目录下另起一个test文件夹,调用之前编译的结果。
比如把head和src的文件遍历写入add_execueable或者add_library,设置include_directory等,基本就可以生成了。我看你这个main.c中都没有include头文件,自然是找不到方法会报错。
如果你这个编的是个库,那可以在test目录下再写一个cmakelist,用taget_library_link和link_directory就可以。
如果你的目录结构是库项目一个文件夹,里面是src和head,测试是另一个test文件夹,那已在根目录下写一个cmakelist,表示总的项目,里面用add_sub_directory把每一个项目包含进来。
你可以先写一个最简单的目录,把cmake调试通过了再一步步改。