我想知道是否有办法只在编译时将一些标志传递给编译器(g ++)而不是链接。 让我用一个例子来解释:我想以这种方式构建我的程序:
g++ -c source1.cpp -o source1.o
g++ -c source2.cpp -o source2.o
g++ source2.o source1.o -o myProgram.c
要做到这一点,我创建了一个包含以下内容的CMakeLists.txt文件:
PROJECT(myProgram)
include_directories("${CMAKE_SOURCE_DIR}/inc")
aux_source_directory("${CMAKE_SOURCE_DIR}/src" SRC_FILES)
add_executable(${PROJECT_NAME} ${SRC_FILES})
然后添加此行以将“-c”标志放入编译器:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -c")
但是这样,即使g ++正在进行链接,cmake总是会添加“-c”标志,即:
g++ -c source1.cpp -o source1.o
g++ -c source2.cpp -o source2.o
g++ -c source2.o source1.o -o myProgram.c
并且逻辑上不会创建myProgram,因为g ++没有运行链接(最后一条指令中的-c)。
如何仅在编译时使用标志“-c”(或任何其他标志)?
答案 0 :(得分:1)
而不是
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -c")
试
add_compile_options(-c)
不知道为什么。您可以在同一个add_compile_options中使用多个空格分隔的选项。
答案 1 :(得分:0)
我正在使用这个" CMakeLists.txt"
PROJECT(prima_prova)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_VERBOSE_MAKEFILE 1)
include_directories("${CMAKE_SOURCE_DIR}/inc")
aux_source_directory("${CMAKE_SOURCE_DIR}/src" SRC_FILES)
add_executable(${PROJECT_NAME} ${SRC_FILES})
当我运行cmake ..并且make时,我明白了:
make[2]: uscita dalla directory "/home/massimi/Scrivania/test/build"
make -f CMakeFiles/prima_prova.dir/build.make CMakeFiles/prima_prova.dir/build
make[2]: ingresso nella directory "/home/massimi/Scrivania/test/build"
[ 25%] Building CXX object CMakeFiles/prima_prova.dir/src/f1.cpp.o
/usr/bin/c++ -I/home/massimi/Scrivania/test/inc -o CMakeFiles/prima_prova.dir/src/f1.cpp.o -c /home/massimi/Scrivania/test/src/f1.cpp
[ 50%] Building CXX object CMakeFiles/prima_prova.dir/src/main.cpp.o
/usr/bin/c++ -I/home/massimi/Scrivania/test/inc -o CMakeFiles/prima_prova.dir/src/main.cpp.o -c /home/massimi/Scrivania/test/src/main.cpp
[ 75%] Building CXX object CMakeFiles/prima_prova.dir/src/f2.cpp.o
/usr/bin/c++ -I/home/massimi/Scrivania/test/inc -o CMakeFiles/prima_prova.dir/src/f2.cpp.o -c /home/massimi/Scrivania/test/src/f2.cpp
[100%] Linking CXX executable prima_prova
/usr/bin/cmake -E cmake_link_script CMakeFiles/prima_prova.dir/link.txt -- verbose=1
/usr/bin/c++ CMakeFiles/prima_prova.dir/src/f1.cpp.o CMakeFiles/prima_prova.dir/src/main.cpp.o CMakeFiles/prima_prova.dir/src/f2.cpp.o -o prima_prova -rdynamic
make[2]: uscita dalla directory "/home/massimi/Scrivania/test/build"
当我在文件中添加此行" CMakeLists.txt":
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -c")
当我运行cmake ..并且make时,我明白了:
make[2]: uscita dalla directory "/home/massimi/Scrivania/test/build"
make -f CMakeFiles/prima_prova.dir/build.make CMakeFiles/prima_prova.dir/build
make[2]: ingresso nella directory "/home/massimi/Scrivania/test/build"
[ 25%] Building CXX object CMakeFiles/prima_prova.dir/src/f1.cpp.o
/usr/bin/c++ -c -I/home/massimi/Scrivania/test/inc -o CMakeFiles/prima_prova.dir/src/f1.cpp.o -c /home/massimi/Scrivania/test/src/f1.cpp
[ 50%] Building CXX object CMakeFiles/prima_prova.dir/src/main.cpp.o
/usr/bin/c++ -c -I/home/massimi/Scrivania/test/inc -o CMakeFiles/prima_prova.dir/src/main.cpp.o -c /home/massimi/Scrivania/test/src/main.cpp
[ 75%] Building CXX object CMakeFiles/prima_prova.dir/src/f2.cpp.o
/usr/bin/c++ -c -I/home/massimi/Scrivania/test/inc -o CMakeFiles/prima_prova.dir/src/f2.cpp.o -c /home/massimi/Scrivania/test/src/f2.cpp
[100%] Linking CXX executable prima_prova
/usr/bin/cmake -E cmake_link_script CMakeFiles/prima_prova.dir/link.txt --verbose=1
/usr/bin/c++ -c CMakeFiles/prima_prova.dir/src/f1.cpp.o CMakeFiles/prima_prova.dir/src/main.cpp.o CMakeFiles/prima_prova.dir/src/f2.cpp.o -o prima_prova -rdynamic
c++: warning: CMakeFiles/prima_prova.dir/src/f1.cpp.o: linker input file unused because linking not done
旗帜" -c"或者,即使在链接期间,也总是添加变量CMAKE_CXX_FLAGS中的任何其他标志,不仅在编译源时。
答案 2 :(得分:-1)
CMAKE_EXE_LINKER_FLAGS
变量才在命令行中使用。在链接期间使用g++
(以及通过修改目标属性设置的标志),即使sprintf
用作链接器可执行文件。