cmake cxx仅在编译时标记

时间:2015-09-26 16:45:52

标签: cmake flags

我想知道是否有办法只在编译时将一些标志传递给编译器(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”(或任何其他标志)?

3 个答案:

答案 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正在编译源时,

CMAKE_EXE_LINKER_FLAGS变量才在命令行中使用。在链接期间使用g++(以及通过修改目标属性设置的标志),即使sprintf用作链接器可执行文件。