作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的示例中,我发现模式 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} xxx")
非常样板。 include_directories("${CMAKE_CURRENT_SOURCE_DIR}/...") 的情况相同。
。
能否简化一下书写?
cmake_minimum_required(VERSION 3.6)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CROSS_COMPILE arm-none-eabi- )
set(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc.exe)
set(CMAKE_CXX_COMPILER ${CROSS_COMPILE}g++.exe)
set(CMAKE_ASM_COMPILER ${CROSS_COMPILE}as.exe)
set(CMAKR_C_FLAGS "${CMAKR_C_FLAGS} -mlittle-endian")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=cortex-m4")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv4")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mabi=aapcs")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsigned-char")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdata-sections")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nosys.specs")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mthumb")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mcpu=cortex-m4")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -g" CACHE INTERNAL "")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
project("project" C)
add_definitions(-DBLE_STACK_SUPPORT_REQD)
add_definitions(-DS132)
add_definitions(-DNRF_LOG_USES_RTT=1)
add_definitions(-DSWI_DISABLE0)
add_definitions(-DSOFTDEVICE_PRESENT)
add_definitions(-DNRF52)
add_definitions(-DAC_ACC_RAW_SAMPLING_FREQUENCY_25Hz)
add_definitions(-DDEBUG)
add_definitions(-DENABLE_DEBUG_LOG_SUPPORT)
add_definitions(-DNRF_LOG_USES_COLORS=0)
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/foo")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/bar")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/baz")
list(
APPEND src
${CMAKE_CURRENT_SOURCE_DIR}/foo/foo.c
${CMAKE_CURRENT_SOURCE_DIR}/bar/bar.c
${CMAKE_CURRENT_SOURCE_DIR}/baz/baz.c
)
add_executable(
project
${src}
)
最佳答案
首先,您的大部分 CMakeLists.txt
更适合工具链文件。
关于您的问题:
编译标志
可以通过 add_compile_options() 添加编译标志:
add_compile_options(
-mlittle-endian
-mcpu=cortex-m4
-mthumb
...
)
或者,您可以执行 Akira suggested 操作:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
-mlittle-endian \
-mcpu=cortex-m4 \
-mthumb \
... \
")
不幸的是,你不能这样做list(APPEND...) ,因为 CMAKE_C_FLAGS
是一个字符串而不是一个列表。
如果您需要传递复合选项,例如--section .text=FOO
,请使用后一种方法。详情请引用这个问题:Pass compound compiler options using cmake .
包含目录
include_directories()可以有多个参数,例如:
include_directories(
foo
bar
baz
)
请注意,您不需要显式指定${CMAKE_CURRENT_SOURCE_DIR}
,因为:
Relative paths are interpreted as relative to the current source directory.
对于更复杂的项目,请考虑 target_include_directories()作为替代方案。
其他
${CMAKE_CURRENT_SOURCE_DIR}
。大多数命令将相对路径解释为相对于当前源目录的路径。关于cmake - 如何以更少的样板形式编写我的 CMakeLists.txt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46193285/
我是一名优秀的程序员,十分优秀!