CMake-没有多个CMakeLists的多个子目录

时间:2018-06-20 13:24:23

标签: cmake

说明

我目前正在创建一个程序,该程序会将simulink和matlab的模型转换为FMU

由于我想尽可能地使过程自动化,所以我也希望使EXE的构建过程自动化,以提取所提供的C-API中的信息,然后提取FMU的DLL。我的计划是使用CMake做到这一点,这就是为什么我在这里。据我所知,代码生成的布局(请参阅下一节),我可以继续制作多个CMakeList,然后将一部分python脚本粘贴到它们的repsective文件夹中。但是,在继续之前,我想确保这是唯一的方法(多个CMakeLists)。

问题

反正还有一个只有多个类别的CMakeList吗?我是否仅使用target_include_directories()包含所有包含文件的子文件夹,还是我完全理解这是错误的?有没有一种方法可以使target_include_directories()也包括子文件夹?

我当前的目录如下:

\---CMakeListExperiment 
|   main.c
|   CMakeLists.txt <--- Is it possible to make this the only CMakeLists?
|   
+---R2017b
|   |   
|   |   
|   +---extern
|   |   \---include
|   |           tmwtypes.h
|   |           
|   +---rtw
|   |   \---c
|   |       \---src
|   |           |   rt_logging.h
|   |           |   rtw_capi.h
|   |           |   rtw_modelmap_logging.h
|   |           |   rt_logging.c
|   |           |   rt_mxclassid.h
|   |           |   rt_logging_mmi.c
|   |           |   rtw_modelmap.h
|   |           |   rt_logging_mmi.h
|   |           |   rtw_modelmap_utils.c
|   |           |   
|   |           +---common
|   |           |       rt_main.c
|   |           |       
|   |           \---ext_mode
|   |               \---common
|   |                       ext_work.h
|   |                       
|   \---simulink
|       \---include
|               rtw_matlogging.h
|               sysran_types.h
|               rtw_extmode.h
|               sl_sample_time_defs.h
|               simstruc_types.h
|               sl_types_def.h
|               rtw_solver.h
|               rtw_continuous.h
|               
+---multi_grt_rtw 
|       rtGetInf.c
|       rtwtypes.h
|       rt_nonfinite.h
|       multiword_types.h
|       multi_capi.h
|       rtmodel.h
|       buildInfo.mat
|       defines.txt
|       rtGetNaN.h
|       builtin_typeid_types.h
|       rt_nonfinite.c
|       multi_capi.c
|       rtGetNaN.c
|       multi.h
|       multi_capi_host.h
|       rtGetInf.h
|       multi_private.h
|       multi_types.h
|       multi_data.c
|       multi.c

我通常很难解释事情,所以如果有任何混淆,请告诉我。我也是SO新手,所以我很喜欢反馈。干杯

编辑1:

我尝试了以下CMakeList。如果将所有源文件都移到“ // multi_grt_rtw / 中,则可以正常工作,但是如果这些文件位于由matlab生成的文件夹中,则将失败。失败为“ ”文件”。

cmake_minimum_required(VERSION 3.0)
project(hello-vsc C)
file(GLOB_RECURSE SOURCES_NORMAL RELATIVE ${CMAKE_SOURCE_DIR} "multi_grt_rtw/*.c")
file(GLOB_RECURSE SOURCES_MATLAB RELATIVE ${CMAKE_SOURCE_DIR} "R2017b/*.c")
set(SOURCE main.c)

include_directories(${CMAKE_SOURCE_DIR}/multi_grt_rtw)
include_directories(${CMAKE_SOURCE_DIR}/R2017b)
add_executable(main ${SOURCE} ${SOURCES_NORMAL} ${SOURCES_MATLAB})

我的猜测是include_directories不是递归的(不是在子目录中搜索源文件),所以我的问题是是否有任何办法可以做到这一点?使include_directories递归?

从理论上讲,另外两个是工作选择

A)由于所有内容总是相同的,因此编写所需的所有CMakeList并使用脚本复制它们以在执行过程中更正文件夹。

B)将多个include_directories()添加到主目录CMakeLists

现在我下班后有一段时间,我想我的问题有点奇怪。但这仍然很引人入胜,因为我找不到太多有关它的信息,因此是否可以按照我希望的方式使用include_directories()即可。

0 个答案:

没有答案