繁体   English   中英

Cmake (< 3.6) 自定义命令中的编译器标志

[英]Cmake (< 3.6) compiler flags in custom command

假设我有一组编译器标志并且有两个目标

set(COMPILE_FLAGS "-a -b -c")

add_executable(exe main.cpp)
set_target_properties(exe PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS})
add_custom_target(target1 DEPENDS exe)

add_custom_target(target2 DEPENDS exe2)
separate_arguments(COMPILE_FLAGS)
add_custom_command(OUTPUT ${DEVICE_OBJ_FILE} 
                    COMMAND ${CMAKE_CXX_COMPILER} ${COMPILE_FLAGS} ${OTHER_FLAGS} main.cpp -o exe2
                    DEPENDS source.cpp)

有没有办法避免调用“separate_arguments”

我宁愿将 FLAGS 设置为分号分隔列表和 COMPILE_OPTIONS 而不是 COMPILE_FLAGS,但我们可以访问的最新 cmake 是 3.6

target_compile_options()至少可以追溯到 CMake 3.0,并且应该是设置此类标志的首选方式。 它需要一个列表。

CMakeLists.txt (注意:我使用-D???作为标志。通常应该使用target_compile_definitions()来定义。)

cmake_minimum_required(VERSION 3.6)

project ("example" CXX)

set(COMPILE_FLAGS -DAYE -DBEE -DSEE)
set(OTHER_FLAGS -DDEE -DEEE)

add_executable(exe main.cpp)
target_compile_options(exe PRIVATE ${COMPILE_FLAGS})
add_custom_command(OUTPUT exe2
                   COMMAND ${CMAKE_CXX_COMPILER} ${COMPILE_FLAGS} ${OTHER_FLAGS} ${CMAKE_CURRENT_LIST_DIR}/main.cpp -o exe2
                   DEPENDS main.cpp)
add_custom_target(target2 DEPENDS exe2)

main.cpp (exe输出The sum is 3 ,exe2输出The sum is 5

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int sum = 0;
#ifdef AYE 
    sum++;
#endif
#ifdef BEE 
    sum++;
#endif
#ifdef SEE 
    sum++;
#endif
#ifdef DEE 
    sum++;
#endif
#ifdef EEE 
    sum++;
#endif
    printf("The sum is %d\n", sum);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM