【发布时间】:2015-09-26 16:45:51
【问题描述】:
我想知道是否有办法只在编译时而不是在链接时将一些标志传递给编译器 (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")
但是通过这种方式,cmake 总是添加“-c”标志,即使 g++ 正在执行链接,即:
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”(或任何其他标志)?
【问题讨论】:
-
您是否尝试运行您的代码?使用 CMake 时,无需为编译器指定“-c”选项。 CMake 知道如何构建源代码,以及之后如何链接它们。
-
好的,我不怀疑 CMake 知道如何构建源代码,以及之后如何链接它们。也许在这种情况下,“-c”标志是无用的,但这只是一个例子,在某些情况下,我可能只需要在编译时使用一些带有 g++ 的标志,而可能只是在链接时使用其他标志。 Cmake 涵盖了这种情况。?
-
即使对于 gcc,编译和链接也使用不相交的选项集。对于 CMake,
CMAKE_CXX_FLAGS是 compile 选项(标志)。可以使用target_link_libraries和其他一些 cmake 命令指定链接选项。