Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add cmake generate method #1212

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open

Conversation

holylong
Copy link

增加了连个CMakeLists.txt文件,增加了一种编译方式

mkdir build
cd build
cmake ..
cmake --build .
cd Debug
TrafficMonitor.exe

@zhongyang219
Copy link
Owner

有个问题,如果我在工程中添加或删除的cpp或h文件,那么CMakeList.txt文件也要相应更新,cmake好像还支持*.cpp这种通配符的写法吧。

@holylong
Copy link
Author

holylong commented Aug 24, 2022 via email

@BombaxCeiba
Copy link
Contributor

建议使用aux_source_directory这样的语句来添加代码文件到CMake工程

@holylong
Copy link
Author

建议使用aux_source_directory这样的语句来添加代码文件到CMake工程

改了一版

@BombaxCeiba
Copy link
Contributor

BombaxCeiba commented Sep 20, 2022

分支拉下来跑了一下,使用CMake 3.24.0-rc2,Ninja 1.11.0构建出错。

[build] [70/73 28% :: 9.187] Building CXX object OpenHardwareMonitorApi\CMakeFiles\OpenHardwareMonitorApi.dir\OpenHardwareMonitorImp.cpp.obj
[build] FAILED: OpenHardwareMonitorApi/CMakeFiles/OpenHardwareMonitorApi.dir/OpenHardwareMonitorImp.cpp.obj
[build] C:\PROGRA1\MICROS1\2022\COMMUN1\VC\Tools\MSVC\14331.316\bin\Hostx64\x64\cl.exe /nologo /TP -DOPENHARDWAREMONITOR_EXPORTS -DOpenHardwareMonitorApi_EXPORTS -DUNICODE -D_AFXDLL -D_UNICODE -ID:\Sources\CPP\OpenSourceProjects\TrafficMonitor\OpenHardwareMonitorApi -ID:\Sources\CPP\OpenSourceProjects\TrafficMonitor\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /clr -std:c++14 /showIncludes /FoOpenHardwareMonitorApi\CMakeFiles\OpenHardwareMonitorApi.dir\OpenHardwareMonitorImp.cpp.obj /FdOpenHardwareMonitorApi\CMakeFiles\OpenHardwareMonitorApi.dir\ /FS -c D:\Sources\CPP\OpenSourceProjects\TrafficMonitor\OpenHardwareMonitorApi\OpenHardwareMonitorImp.cpp
[build] cl: 命令行 error D8016 :“/RTC1”和“/clr”命令行选项不兼容
[build] [70/73 30% :: 9.190] Building CXX object OpenHardwareMonitorApi\CMakeFiles\OpenHardwareMonitorApi.dir\Stdafx.cpp.obj
[build] FAILED: OpenHardwareMonitorApi/CMakeFiles/OpenHardwareMonitorApi.dir/Stdafx.cpp.obj
[build] C:\PROGRA1\MICROS1\2022\COMMUN1\VC\Tools\MSVC\14331.316\bin\Hostx64\x64\cl.exe /nologo /TP -DOPENHARDWAREMONITOR_EXPORTS -DOpenHardwareMonitorApi_EXPORTS -DUNICODE -D_AFXDLL -D_UNICODE -ID:\Sources\CPP\OpenSourceProjects\TrafficMonitor\OpenHardwareMonitorApi -ID:\Sources\CPP\OpenSourceProjects\TrafficMonitor\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /clr -std:c++14 /showIncludes /FoOpenHardwareMonitorApi\CMakeFiles\OpenHardwareMonitorApi.dir\Stdafx.cpp.obj /FdOpenHardwareMonitorApi\CMakeFiles\OpenHardwareMonitorApi.dir\ /FS -c D:\Sources\CPP\OpenSourceProjects\TrafficMonitor\OpenHardwareMonitorApi\Stdafx.cpp
[build] cl: 命令行 error D8016 :“/RTC1”和“/clr”命令行选项不兼容
[build] [70/73 31% :: 9.204] Building CXX object OpenHardwareMonitorApi\CMakeFiles\OpenHardwareMonitorApi.dir\UpdateVisitor.cpp.obj
[build] FAILED: OpenHardwareMonitorApi/CMakeFiles/OpenHardwareMonitorApi.dir/UpdateVisitor.cpp.obj
[build] C:\PROGRA1\MICROS1\2022\COMMUN1\VC\Tools\MSVC\14331.316\bin\Hostx64\x64\cl.exe /nologo /TP -DOPENHARDWAREMONITOR_EXPORTS -DOpenHardwareMonitorApi_EXPORTS -DUNICODE -D_AFXDLL -D_UNICODE -ID:\Sources\CPP\OpenSourceProjects\TrafficMonitor\OpenHardwareMonitorApi -ID:\Sources\CPP\OpenSourceProjects\TrafficMonitor\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /clr -std:c++14 /showIncludes /FoOpenHardwareMonitorApi\CMakeFiles\OpenHardwareMonitorApi.dir\UpdateVisitor.cpp.obj /FdOpenHardwareMonitorApi\CMakeFiles\OpenHardwareMonitorApi.dir\ /FS -c D:\Sources\CPP\OpenSourceProjects\TrafficMonitor\OpenHardwareMonitorApi\UpdateVisitor.cpp
[build] cl: 命令行 error D8016 :“/RTC1”和“/clr”命令行选项不兼容

但是使用Visual Studio 2022作generator是没问题的,但是有CMake警告。

[cmake] CMake Warning in OpenHardwareMonitorApi/CMakeLists.txt:
[cmake] For the target "OpenHardwareMonitorApi" the /clr compiler flag was added
[cmake] manually. Set usage of C++/CLI by setting COMMON_LANGUAGE_RUNTIME target
[cmake] property.
[cmake]
[cmake]

顺便建议给MSVC补上 /MP 加速编译。


edit 考虑把 build 和 out 文件夹放进 .gitignore 文件里面

@BombaxCeiba
Copy link
Contributor

看了下,想要Ninja这类非Visual Studio生成器支持clr比较困难,需要手动补充/FU选项或者在代码中使用#using语句,所以这块先不管了(摆烂)。

添加/MP后,CMake直接build还是没有使用多核编译,但是使用VS打开项目再编译是有效的,所以我写了个target。

if(CMAKE_GENERATOR MATCHES "Visual Studio")
    add_custom_target(BUILD_ALL_WITH_MP_OPTION
        COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target ALL_BUILD --config $<CONFIGURATION> -- -m)
endif()

即直接给调用MSBuild的命令后面补了个 -m 选项。使用CMake编译时选BUILD_ALL_WITH_MP_OPTION目标,就可以启用多核编译了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants