使用Cmake,我想对可执行文件和库应用一些通用标志。
好吧,我以为我可以使用PUBLIC关键字来使用 target_compile_options 。我测试了一个带有可执行文件和静态库的小例子,它们只有一个文件(main.c和mylib.c),但是没有按预期工作。
根CMakeLists.txt如下所示:
cmake_minimum_required(VERSION 3.0)
# Add the library
add_subdirectory(mylib)
# Create the executable
add_executable(mytest main.c)
# Link the library
target_link_libraries(mytest mylib)
# Add public flags
target_compile_options(mytest PUBLIC -Wall)
图书馆的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
add_library(mylib STATIC mylib.c)
标志 -Wall 仅应用于main.c而不应用于库文件(mylib.c):
[ 25%] Building C object mylib/CMakeFiles/mylib.dir/mylib.c.o
cd /patsux/Programmation/Repositories/test-cmake-public/build/mylib && /usr/lib/hardening-wrapper/bin/cc -o CMakeFiles/mylib.dir/mylib.c.o -c /patsux/Programmation/Repositories/test-cmake-public/mylib/mylib.c
[ 50%] Linking C static library libmylib.a
[ 25%] Building C object CMakeFiles/mytest.dir/main.c.o
/usr/lib/hardening-wrapper/bin/cc -Wall -o CMakeFiles/mytest.dir/main.c.o -c /patsux/Programmation/Repositories/test-cmake-public/main.c
现在,如果在库上应用了标志而不是可执行文件,则可以正常工作。
# Add public flags on the library
target_compile_options(mylib PUBLIC -Wall)
我明白了:
[ 25%] Building C object mylib/CMakeFiles/mylib.dir/mylib.c.o
cd /patsux/Programmation/Repositories/test-cmake-public/build/mylib && /usr/lib/hardening-wrapper/bin/cc -Wall -o CMakeFiles/mylib.dir/mylib.c.o -c /patsux/Programmation/Repositories/test-cmake-public/mylib/mylib.c
[ 50%] Linking C static library libmylib.a
[ 75%] Building C object CMakeFiles/mytest.dir/main.c.o
/usr/lib/hardening-wrapper/bin/cc -Wall -o CMakeFiles/mytest.dir/main.c.o -c /patsux/Programmation/Repositories/test-cmake-public/main.c
[100%] Linking C executable mytest
设置一般标志(例如库中的目标类型)是没有意义的。
如何正确分享一般旗帜?我知道我可以使用 add_definitions()。这是正确的方式吗?
我也测试过:
set_target_properties(mytest PROPERTIES COMPILE_FLAGS -Wall)
但旗帜不公开。
答案 0 :(得分:0)
您可以在根文件中添加如下标记:
add_compile_options(-Wall)
或者,如果您使用3.0之前的cmake版本:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")