CMake入门教程【高级篇】设置源文件属性(set_source_files_properties)

1.概述信息

在 CMake 项目中,管理和配置源文件属性是保持构建系统灵活性和高效性的重要方面。set_source_files_properties 命令允许开发者为指定的源文件设置特定属性,如编译标志、定义宏等。

#2.命令作用

set_source_files_properties 用于为一个或多个源文件指定属性。这些属性可能影响这些文件的编译行为或其他相关设置。

3.使用说明

  • 语法:set_source_files_properties(files PROPERTIES prop1 value1 prop2 value2 ...)
  • 参数:
    • files:一个或多个源文件。
    • PROPERTIES:后面跟随一系列属性名和值的对。

4.完整代码示例

  • 项目结构
MyProject/
|-- CMakeLists.txt
|-- include/
|   |-- mylibrary.h
`-- src/
    |-- mylibrary.cpp
    `-- main.cpp
  • CMakeLists.txt

                
cmake_minimum_required(VERSION 3.12 FATAL_ERROR) project(signal VERSION 3.28) project(MyFortranProject LANGUAGES Fortran) include(GNUInstallDirs) include(CMakePackageConfigHelpers) add_library(myshared SHARED ${SOURCES}) set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fPIC") message(STATUS "Fortran编译器: ${CMAKE_Fortran_COMPILER}") project(MyProject VERSION 1.0.0) # 定义 signal 目标(假设使用 degrad.f) set(signal_SOURCE_FILE src/degrad.f) if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${signal_SOURCE_FILE}") message(FATAL_ERROR "Source file for signal target not found! Please check the path: ${CMAKE_CURRENT_SOURCE_DIR}/${signal_SOURCE_FILE}") endif() add_library(signal SHARED ${signal_SOURCE_FILE}) set_target_properties(signal PROPERTIES LINKER_LANGUAGE Fortran) # 设置 signal 目标的编译选项 target_compile_options(signal PRIVATE -std=legacy) # 设置 signal 目标的属性 set_target_properties(signal PROPERTIES VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}") add_library(signal::signal ALIAS signal) # 定义 Signal 目标(使用 signal.cc) set(SIGNAL_SOURCE_FILE src/signal.cc) if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SIGNAL_SOURCE_FILE}") message(FATAL_ERROR "Source file for Signal target not found! Please check the path: ${CMAKE_CURRENT_SOURCE_DIR}/${SIGNAL_SOURCE_FILE}") endif() add_library(Signal SHARED ${SIGNAL_SOURCE_FILE}) set_target_properties(Signal PROPERTIES LINKER_LANGUAGE C) # 配置输入文件路径 set(INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/signalConfig.cmake.in") # 输出当前工作目录 message(STATUS "Current working directory: ${CMAKE_CURRENT_SOURCE_DIR}") # 输出解析后的输入文件路径 message(STATUS "Resolved input file path: ${INPUT_FILE}") # 检查输入文件是否存在 if(NOT EXISTS "${INPUT_FILE}") message(FATAL_ERROR "Input file not found! Please check the path: ${INPUT_FILE}") endif() # 确保输出目录存在 set(OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") file(MAKE_DIRECTORY "${OUTPUT_DIR}") # 配置文件 configure_file("${INPUT_FILE}" "${OUTPUT_DIR}/signalConfig.cmake" @ONLY) # 安装配置文件 install(FILES "${OUTPUT_D
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小鱼酱

用心写好每一篇博客

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值